操作系统学习(四) —— 进程控制和一些具体例子

2017-08-05  本文已影响0人  曲谐_

学习材料:计算机操作系统(第2版,人民邮电出版社)

一、进程控制

概念:是对系统中的所有进程实施有效的管理,是处理机管理功能的一部分。为了实现共享,协调并发进程的关系。进程管理的功能应包括:进程控制、进程调度、实现进程之间的同步协调和通信

1)进程创建

2)进程撤销

功能:

撤销本进程,撤销一个指定标识符的进程或撤销一组子进程。

过程:

3)进程阻塞与唤醒

进程阻塞:进程需要等待某一时间完成时,调用阻塞原语将自己挂起。进程一旦被挂起,它只能由另一个进程唤醒。也就是,先停止调用进程的执行,将CPU现场保留到该进程的PCB现场保护区(也即完成了多少工作,将其保存),改变其状态为等待,并插入等待队列。最后使控制转向进程调度。
本质:进程需要等待某一资源,指令无法继续执行,此时将进程挂起,调度其他进程。
进程唤醒:当进程等待的事件发生时,唤醒等待该事件的进程。
进城唤醒的步骤

4)进程约束关系

分两种情况:
1.竞争系统资源而引起的间接相互制约关系。
2.进程之间存在共享数据而引起的直接相互制约关系。

重点:进程互斥

临界资源:通常把一次仅允许一个进程使用的资源称为临界资源。一般输入机,打印机等都有这种性质。
临界区:每个进程中,访问该临界资源的那段程序称为临界区。是进程对公共变量或存储区进行访问与修改的程序段。

上面那些满足条件的进程进入临界区必须互斥!

互斥:多进程对公共存储区这样的临界资源有这样的恩特店,共享的各方不能同时读写同一数据区,只有当一方读写完毕后,另一方才可以读写。这种进程的制约关系称之为互斥。

重点:进程同步

概念:相互合作的一组并发进程。在一些关键点上可能需要互相等待与互通消息,这种相互制约的等待与互通消息称为进程同步。

重点:同步机构

进程同步的两个例子:

一、病员就诊:

我们用PV操作来实现,首先先要理解的是,下面的程序是需要来回转入转出的,不是一个程序执行到底,这也体现了进程同步的概念。
下面是伪代码:

main()
{
    int s1=0;//信号灯1,表示看病进程,也可以理解为有无化验单
    int s2=0;//信号灯2,表示化验进程,也可以理解为有无化验结果
    cobegin
        labora();
        diagnosis();
    coend
}
labora()
{
    while(化验工作未完成)
    {
        p(s1);
        化验工作;
        v(s2);
    }
}
diagnosis()
{
    while(看病工作未完成)
    {
         看病;
         v(s1); //看完病才会提供化验单
         p(s2);
         diagnosis;
     }
} 

解读:

生产者——消费者问题

概念:简单地来说,就是有一块公用缓冲区,生产者生产资源,将资源放置到缓冲区去,而消费者读消息进程, 从缓冲区提取资源。
设置:公用缓冲区是临界资源,因此设置三个信号灯empty,full,mutex,分别表示空缓冲区(默认为缓冲区大小n),满缓冲区(初始为0),以及互斥信号灯,占用时为1,占用后为0。

//生产者和消费者操作过程中的伪代码:
producer()
{
    while(生产未完成)
    {
         ……
         生产一个产品;
         p(empty);
         p(mutex);
         送到有界缓冲区;
         v(mutex);
         v(full);
    }
}
consumer()
{
    while(还要继续消费)
    {
        p(full);
        p(mutex);
        从有界缓冲区取产品;
        v(mutex);
        v(empty);
        ……
        消费一个产品;
    }
}

试想:如果把生产者前两行申请占用资源的代码换一下,会发生什么情况?
提示:死锁

上一篇 下一篇

猜你喜欢

热点阅读