操作系统原理学习笔记(2)之进程概念(关键词:操作系统原理学习笔记、进程、process)

一、进程的概念

    1.定义:进程是对正在运行的程序的抽象。(a program in execution)

    2.注意:

        (1)进程与程序的区别。同样的程序处理不同的数据,是两个进程。

        (2)不同的进程:

            a.defferent data with same program(相同的程序,不同的数据)

            b.different program with same data (不同的程序,相同的数据)


二、一个进程也包括:

    1.program counter,当前执行的位置

    2.stack,伴随的数据

    3.data section,伴随的数据

      

三、从3个维度认识进程:

    1.程序维度(这个进程在执行什么程序。)

    2.数据维度(这个进程执行的程序,在处理什么数据。)

    3.状态维度(程序可以看做是静止的。进程是一个动态的概念,有生命周期。程序运行,则进程创建;程序不执行,则进程没有了。)


四、进程的状态

    1.进程的几种状态(仅做参考):

        (1)new 起始状态

        (2)terminated 终止状态

        (3)ready 就绪状态(一个程序已经全部驻留在内存了,要处理的数据也已经到位了,只要把CPU给它,程序就可以一条一条执行下去了。)

        (4)running 执行状态(正在利用CPU执行程序。)

        (5)waiting 等待状态(还没有准备好,还在等某一个资源。可能是IO设备的资源,也可能是等待对方设备的通信资源。eg:一个程序执行到了输入语句上面,它在等待输入设备给它一个输入语句,即使给了CPU也做不下去。)

    2.注意:一定有起始状态和终止状态,在一个OS设计时,定义了、设计了多少状态,就有多少状态,未必是如上列出的状态。

    3.进程状态迁移示例:



五、进程控制块(Process Control Block PCB)

    1.进程通常与下列信息关联:

        (1)Process state 进程的状态

        (2)Program counter 某个寄存器,总是指向下一条要执行的指令。

        (3)CPU registers

        (4)CPU scheduling information CPU调度的信息

        (5)Memory-management information 所有和内存管理相关的信息

        (6)Accounting information 记账信息

        (7)I/O status information

    2.每一个进程,都有一个PCB。PCB是在内存里面驻留的,反映进程概念的对应的一个实体(1对1的关系)。

    3.THAT SPECIFIC TO THE PROCESS:

        如果某一个数据结构、某一个信息是要两个进程共享的,那么,不要放到PCB里面去。

        只有那些关于某个进程独占的信息,才放到PCB里面去。

        目的是控制PCB的大小。

    4.PCB示例(以Linux PCB为例)


    process state 进程状态

    process number 进程号,正整数,不允许重复

    program counter 指向代码的指针位置的一个寄存器

    registers 通用的寄存器

    memory limits 关于内存使用的上下界限寄存器的值

    list of open files 进程已经打开的文件的列表


六、进程调度队列,动态反映操作系统的全貌

    1.Job queue 作业队列,等待进入计算机系统的待处理任务(想执行的程序,还没有开始执行,还不是进程,还没有装入内存)

    2.Ready queue 等待队列,驻留内存,准备就绪,等待CPU

    3.Device queues I/O设备队列,等待I/O设备的进程


七、一个进程在队列间的迁移



八、进程上下文切换(Context Switch)

    1.单个CPU任何时候只能为一个进程服务;

    2.当CPU转向为另外一个进程服务时,它必须保存原有(转换前)进程的状态,装入待服务(转换后)进程的状态,也即“进程上下文切换”;

    3.“状态”指寄存器、标志位、堆栈等当前值;

    4.上下文切换时间是一种额外开销(overhead),因为期间CPU不做对用户进程直接有益的事;

    5.上下文切换时间决定于CPU硬件支持力度。

    解释:程序在运行的时候,为了追求高效率,希望把它的变量是放在寄存器里面,而不是内存里面。最起码是放在内存里面,而不是放在磁盘里面。

    进程在运行的时候,一定会用到寄存器。然而寄存器的数量是极其有限的。只能把关键的、使用频繁的变量放入寄存器。

    解决方案:


        要让PCB1用CPU之前,先要把原来的CPU保存的寄存器的值,保留起来。(保存PCB0的现场)

        把PCB1的寄存器的值,装入CPU。(布置PCB1的现场)





1.暂时没弄明白的

    系统调用、fork、execve、文件描述符、句柄



参考文献:

1.《操作系统概念》

2.操作系统-浙江大学