0
点赞
收藏
分享

微信扫一扫

详细揭秘淘宝天猫详情接口API:购物从此更高效

陬者 03-25 21:00 阅读 3
java-eejava

 

目录

1.操作系统

操作系统的构成

2.进程

2.1进程的概念

2.2管理

2.3pcb

(1)pid

(2)内存指针

​编辑

(3)文件描述符

(4)进程调度信息

并行执行

并发执行

pcb中支持进程调度的属性

谢谢您的访问!!期待您的关注!!


1.操作系统

我们知道,在一台计算机中,有内存、硬盘等硬件资源,而我们的操作系统就是软件层面的了

实际上软件就是许多指令的集合,就是一些数据,但是可以让计算机按照对应的规则去执行

而操作系统是一个非常复杂的软件,设计的指令代码量是千万级别的

对于我们常见的操作系统,比如win10,win11,Linus(主要是给程序员使用),macOS(苹果电脑),Android ,IOS,以及其他特定领域的操作系统

不同的操作系统,是不同的厂商给特定的领域提供的,但是实际上核心大同小异

操作系统的初心实际上是为了搞管理 ,就是为了使得一台计算机上的所有硬件资源能够配合好,并给所有软件资源提供良好稳定的运行环境

操作系统的构成

操作系统 = 内核 + 配套的应用程序

首先内核是操作系统中最核心的一部分,我们前面说到的管理,就是在操作系统内核里面完成的,而配套的应用程序往往需要靠操作系统内核提供一些功能作为支撑

假设

System.out.println("hello world");

 我们运行这一段简单的代码,实际上就可以当成应用程序,这里就需要操作显示器,但是显示器是一个硬件资源,并不能直接由程序操作,就需要这个程序告诉操作系统,"我要操作显示器",那么操作系统就会完成对应的功能

而"告诉操作系统"这个方法,是因为操作系统会给程序提供了一系列的API,有的API是操作显示器,有的是操作网卡,有的是响应鼠标键盘的...而上述打印的过程就是程序调用了java内置的标准库方法,这个方法本质就是调用操作系统里面提供"操作显示器"的API.这个系统调用就称为"System call",调用对应API后,就会进入到操作系统内核,内核再通过显示器的驱动程序,在显示器上就能绘制出对应内容

而驱动程序是必不可少的,操作系统需要通过硬件资源对应的驱动程序来操作硬件.硬件是非常多的,同一种硬件,不同的厂商,生产出来的硬件细节都会有所不同,操作系统也不知道具体操作的是哪个硬件,就需要商家通过驱动程序,告诉操作系统这个硬件对应的特点和使用详情


2.进程

前提说明:为了方便理解,此处一个进程里面只包含一个线程,等后续更新线程专题,会有所不同

2.1进程的概念

所谓进程,可以理解成:当一个运行起来应用程序,在操作系统就会有一个对应的进程

进程是操作系统分配给执行程序的一块内存空间,当一个程序被执行的时候,操作系统为它创建进程中就会包括存储程序的代码.数据以及执行状态等.

我们在我们的电脑任务管理器上也可以看到当前电脑上的进程:

这上面就显示了这些进程都占用了哪些系统资源,占用了多少...想要让一个程序运行起来,需要给他分配的系统资源包括但不限于内存,cpu,硬盘,网络带宽...

因此:进程也可以认为是系统进行资源分配的基本单位

2.2管理

进程多了,就要考虑管理.对于管理这件事情,操作系统采取的方法就是"先描述再组织"

所谓先描述,就是通过一些结构体(因为操作系统大部分底层都都是c / c++实现的) / 类把一个进程的核心信息抽象出来,并进行表示;而组织是通过一定的数据结构将这样的多个结构体 / 类的对象进行串起来,方便进行增删改查

2.3pcb

我们在上述管理中谈到的结构体,在操作系统中通常使用被称为pcb这样的结构体来描述进程的,

所谓pcb就是进程控制块(Process control block),但是实际上落到具体的操作系统上名称会有所不同,就比如Linus上的pcb叫做task_struct

而组织就是操作系统会把这样多个pcb用链表结构组织起来(实际上不能简单认为是链表,而是多个链表综合在一起的,这里只是简称).因此,我们通过任务管理器查看进程列表就是在遍历链表的每个节点,并且获取显示出对应的信息,创建新的进程,新的进程会创建出新的pcb,并添加到上述的链表中销毁某个进程,就要把链表上对应的pcb节点删除

在pcb中,我们重点了解以下属性:

(1)pid

就是进程的id / 身份标识

(2)内存指针

程序运行的时候,需要消耗一定的硬件资源,而内存就是一个非常重要的资源.一个程序在运行的时候,,就会将对应的数据 / 指令加载到内存里面

而内存指针就是一组指针,用来告诉操作系统,这个程序要运行的指令以及依赖的数据都存放在内存的哪些地方

具体如下图所示:

(3)文件描述符

一个进程运行的时候,会操作一些文件,而文件操作符就是通过顺序表这样的结构,记录下当前进程都打开了哪些文件 

(4)进程调度信息

我们在任务1管理器中能看到

当前运行了上百个进程 

我们知道现代的cpu是多核心cpu,一个进程在一个cpu核心上运行,但是cpu的核心数量跟进程相比也是远远不足的

这时候,就要通过进程调度来负责了

并行执行

在上面提过,一个进程在一个cou核心上面运行

此时在同一时间,就能有16个进程同时运行(完全是同时),这就是并行执行

并发执行

一个核心虽然在同一时刻只能执行一个进程,但是在不同时刻是可以执行不同进程的

cpu会把总的执行时间,切换成若干个小的片段,每个片段执行一个进程,这样的每个片段称为"时间片",由于时间片比较短,cpu切换进程的速度极快,人感知不到,站在人的角度,就是这若干个进程在同时执行(其实本质上不是同时)

这样,即使是在单核cpu的年代,也可以通过并发来实现同时运行多个程序的效果

注意:并行,是指在微观上也是同时执行

但是并发是指在宏观上是同时执行,但是在微观上面是串行执行

这两者都是在操作系统内核部分管理好了,编写应用程序的时候无法干预,普通用户也无法感知到

因此,往往就把并行和并发统称为"并发",把编写解决并发问题的程序,称为并发编程

pcb中支持进程调度的属性

(1)状态

状态有:就绪状态和阻塞状态

处于就绪状态就是随叫随到,但是处于阻塞状态的进程,无法在cpu上执行,往往一个进程在等待IO操作的时候就会进入阻塞状态(scanner.next等操作)

(2)优先级

进程在竞争 CPU 时间时的相对重要性。不同的进程可以有不同的优先级,进程调度算法会参考进程的优先级来决定下一个执行的进程,在分配资源的时候就存在资源倾斜

(3)上下文

进程在cpu执行过程中,也会产生很多的"中间结果",在进程切换出cpu之前,就需要把这些中间结果(cpu的各种寄存器中的值)保存到pcb的上下文里面(从寄存器到内存)

下次这个进程回到cpu上执行的时候,就需要先把之前的存档恢复回来(内存->寄存器),在其中就有一个pc程序计数器,记录执行到哪一条指令了,下次执行就是沿着上次执行到的地方继续执行

(4)记账信息

操作系统也是要避免某个进程一直吃不到cpu资源,就会进行类似的统计,给吃的cpu少的进程,适当地多分配点


谢谢您的访问!!期待您的关注!!

举报

相关推荐

0 条评论