进程模型

(一)多道程序设计

  从系统允许多个程序同时进入CPU那一天开始,我们才有了进程,这个对CPU资源的抽象。我们把这种多个程序同时运行在CPU的情况叫做多道程序。其优点不必赘述,举个例子,单一程序设计时,好比公交车上每次只能坐一个人,多道以后,就能坐多个人,有上有下。也是基于这样的设计思路,才有现在的各种貌似高端的技术。多道,跟中断,DMA,SPOOLer一并,被称为计算机操作系统发展史上里程碑一样的创造。


(二)进程定义

在某个数据集合上,具有独立功能的程序运行过程,叫做进程。英文里有许多叫法(process task job)当然换汤不换药,不同时代的产物罢了。进程的出现,解决了程序并发执行时对系统资源共享的描述问题,同时顺路解决了程序执行时动态特征的描述问题。虽然是抽象出来的概念,但作为程序员,那东西是存在的

(三)进程控制操作

进程控制的目的是为进程完成生命周期指明方向,保驾护航。系统创建了进程,一定要负责到底。从进程创建,撤销,到状态转换中的阻塞,唤醒,挂起,激活,同时还有进程间优先级的控制。这些控制指令都是通过“原语”实现的,这个词不出意外最先是在数据库基础知识中学到的,对滴,不能被打断,打断就抛弃结果。对于系统,没有被打断的可能性。

此处加一个小插曲:进程的创建fork()的执行过程

1.为子进程分配一个空闲进程描述符;

2.赋予子进程唯一标示符pid;

3.以一次一页的方式复制父进程的地址空间(这是Unix的实现方式,linux引入COW技术);

4.子进程获得父进程共享资源的指针;

5.子进程进入就绪态,加入调度队列;

6.子进程返回0,向父进程返回pid。

(四)进程分类及进程层次结构

系统进程vs用户进程,系统进程优先于用户进程

前台进程vs后台进程,前后台进程有优先级的区别,前台往往高于后台

计算密集vsI/O密集,决定了调度策略,是系统设计时讨论的话题

进程的层级结构有树形(unix)和平行结构(windows)

六)进程控制块

就像开车得有方向盘,管理得有管理的可控对象,对于进程来讲,PCB就是进程的方向盘他是一个专门的数据结构,记录了进程的外部特征,描述了进程的运动过程,标记了进程在整个生命周期中的活动,成为了系统感知进程存在的唯一标识。这个数据结构中包含了三个方面的内容:

进程管理,内存管理,文件管理

看上去就很容易理解了,OS的大部分功能通过进程来实现,所以进程中必须包含实现操作系统功能的“方向盘”。这些内容中,多数是记录了管理相应对象的主指针,以及指向不同管理对象描述块的指针,比如文件管理,指向文件描述块,就是我们常说的FCB等。

在linux系统中,TCB被具体实现为task_struct其中包含了进程调度 pid,信号处理,状态管理,进程队列指针,定时控制,信号量管理,上下文切换,文件系统管理,内存管理等等。这个数据结构能看懂,看完,你的Linux内核分析工作就可以开始了。

(七)进程虚拟地址空间

内存管理模块会在进程创建的时候分配地址空间,这些空间被进程划分为四大部分:

PCB占用,用户栈空间,私有用户空间(代码),共享空间。其中,PCB占用的部分又划分为PCB号,进程状态,进程控制信息



你可能感兴趣的:(操作系统)