Chapter 2 进程的描述和控制

2.1 前趋图和程序执行

2.1.1 前趋图

  • 前趋图是指一个有向无循环图,用于描述进程之间执行的先后顺序
  • 图中的每一个结点可用来表示一个进程或者程序段
  • 结点间的有向边则表示两个结点之间存在的前趋关系

2.1.2 程序顺序执行

  • 程序的顺序执行:程序在执行时都需要按照某种先后次序顺序执行
  • 程序顺序执行时的特征:顺序性、封闭性、可再现性

2.1.3 程序并发执行

  • 在系统中引入多道程序技术,使程序或程序段间能并发执行
  • 只有在不存在前趋关系的程序之间才能进行并发执行
  • 程序并发执行时的特征:间断性、失去封闭性、不可再现性

2.2 进程的描述

2.2.1 进程的定义和特征

  • 为了使参与并发执行的每个程序(含数据)都能独立地运行,在操作系统中必须为之分配一个专门的数据结构,称为进程控制块(Process Control Block)
  • 利用PCB来描述进程的基本情况和活动过程,进而控制和管理进程
  • 进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位
  • 进程的特征包括以下:
    • 动态性:最基本的特征,进程实体有一定的生命期限
    • 并发性:多个进程实体同时存在于内存中,且能在一段时间内同时运行
    • 独立性:进程实体是一个能独立运行、独立获得资源和独立接受调度的基本单位
    • 异步性:进程按照异步方式进行

2.2.2 进程的基本状态及转换

  • 进程的三种基本状态:进程在运行规程中呈现间断性的运行规律
    • 就绪状态(ready)进程处于准备好的状态,已分配到除了CPU以外的所有资源,如果系统中有许多处于就绪状态的进程,通常将它们排成一个就绪队列
    • 执行状态(running)指进程已经获得CPU,其程序正在执行的状态。对任意一个时刻,对于单处理机系统中,只有一个进程处于执行状态。
  • 阻塞状态(block)指正在执行的进程由于发生某事件暂时无法继续执行时的状态。此时引起进程调度,OS把处理机分配给另一个就绪进程,而让受阻进程处于暂停状态。
  • 状态创建和终止状态
    • 创建状态
      1. 首先由进程申请一个空白PCB,并向PCB中填写用于控制和管理进程的信息
      2. 然后为该进程分配运行时所必需的资源
      3. 最后把该进程转入就绪状态并插入到就绪队列之中
    • 终止状态
      1. 首先是等待操作系统进行善后处理
      2. 最后将其PCB清零,并将PCB空间返还系统

2.2.3 挂起状态和进程状态的转换

  • 为了用户和系统观察和分析进程需要,引入了挂起操作
  • 当该操作作用于某个进程时,该进程将被挂起,意味着此时该进程处于静止状态。如果进程正在执行,它将暂停执行。若原本处于就绪状态,则该进程此时暂不接受调度

2.2.4 进程管理中的数据结构

  • 进程控制块PCB的作用
    • 作为独立运行基本单位的标志:当一个程序配置了PCB之后,就表示它已经是一个能在多道程序环境下独立运行、合法的基本单位。
    • 能实现间断性运行方式:当进程因阻塞而暂停运行时,必须保留自己运行时的CPU现场信息,再次被调度运行时,需要恢复现场信息,这些记录在PCB中
    • 提供进程管理所需要的信息
    • 提供进程调度所需要的信息

2.3 进程控制

2.3.2 进程的创建

  • 进程控制是进程管理中最基本的功能
  • 引起创建进程的事件
    • 用户登录
    • 作业调度
    • 提供服务
    • 应用请求
  • 进程的创建过程
    • 申请空白PCB
    • 为新进程分配其运行所需的资源
    • 初始化进程控制块
    • 如果进程就绪队列接纳新进程,便将新进程插入到就绪队列

2.3.3 进程的终止

  • 引起进程终止的事件
    • 正常结束
    • 异常结束
    • 外界干预

2.4 进程同步

  1. 临界区
    • 人们把每个进程中访问临界资源的那一段代码称为临界区,进程互斥地进入自己的临界区,就可以实现进程对临界资源的互斥访问
    • 在临界区前面增加一段用于进行上述检查的代码,把这段代码称为进入区
    • 在临界区的后面也要加上一段称为退出区的代码
    • 其他的部分称为剩余区
  2. 同步机制应该遵循的规则
  • 空闲让进:当无进程处于临界区时,应该允许一个请求进入临界区的进程进入临界区
  • 忙则等待:当已有进程进入临界区时,其他试图进入临界区的进程必须等待
  • 有限等待:对要求访问临界资源的进程,应保证在有限时间内能进入自己的临界区
  • 让权等待:单进程不能进入自己的临界区时,应立即释放处理机

2.4.3 信号量机制

  1. 整形信号量
    • 整形信号量定义为一个用于表示资源数目的整型量S
    • 除初始化外,仅能通过两个标准的原子操作wait(S)和signal(S)来访问
  2. 记录型信号量
    • 增加了“让权等待"的策略
    • 当一个进程获取不到所需要的资源,就会被放入阻塞队列中
  3. AND型信号量
    • 解决当一个进程需要同时获得多个资源时的情况
    • 思想:将进程在整个运行过程中所需要的所有资源,一次性全部的分配给进程,待进程使用完成后再一次释放。只要尚有一个资源未能分配给进程,其他所有可能位置分配的资源也不分配给它

2.4.4 信号量的应用

  • 利用信号量实现进程互斥
  • 利用信号量实现前趋关系

2.5 经典进程的同步问题

2.5.1 生产者-消费者问题

  • 假定在生产者和消费者之间的公共缓冲区具有n个缓冲区,可以使用互斥信号量mutex
int in=0,out=0;
item buffer[n];
semaphore mutex = 1, empty = n, 
    full = 0;
void producer(){
    do{
        // produde a nextp
        wait(empty);
        wait(mutex);
        buffer[in] = nextp;
        in = (in+1) % n;
        signal(mutex);
        signal(full);
    }while(TRUE);
}

void consumer(){
    do{
        wait(full);
        wait(mutex);
        nextc = buffer[out];
        out = (out+1) % n;
        signal(mutex);
        signal(empty);
        // consumer a nextc
    }while(TRUE);
}

2.5.2 哲学家进餐问题

  • 可以用一个信号量表示一只筷子,由这五个信号量构成信号量数组chopstick[5]
// 使用记录型信号量

do{
    wait(chopstick[i]);
    wait(chopstick[(i+1) % 5]);
    //eat
    signal(chopstick[i]);
    signal(chopstick[(i+1) % 5];
    //think
}while(TRUE);

//使用AND信号量

do{
    //think
    Swait(chopstiock[(i+1) % 5],
            chopstick[i]);
    //eat
    Signal(chopstiock[(i+1) % 5],
            chopstick[i]);
}while(TRUE);

2.5.3 读者-写者问题

  • 允许多个读者同时读数据,不允许多个写者同时写数据,读者和写者不能同时操作
// 利用记录型信号量
semaphore rmutex = 1, wmutex = 1;
int readcount = 0;
void reader(){
    do {
        wait(rmutex);
        if(readcount == 0) wait(wmutex);
        readcount++;
        signal(rmutex);
        // perform
        wait(rmutex)
        radcount--;
        if(readcount == 0) signal(wmutex);
        signal(rmutex);
    }while(TRUE);
}

2.7 线程(Threads)的基本概念

2.7.1 线程的引入

  • 引入线程是为了减少程序在并发执行时所付出的时空开销
  1. 进程的两个基本属性
    • 进程是一个可拥有资源的独立单位
    • 进程同时又是一个可独立调度和分派的基本单位

2.7.2 线程与进程的比较

  1. 调度的基本单位
    • 在同一进程中,线程的切换不会引起进程的切换,但从一个进程中的线程切换到另一进程中的线程时,必然就会引起进程的切换
  2. 并发性
    • 不仅进程之间可以并发执行,而且在一个进程中的多个线程之间也可以并发执行
  3. 拥有资源
    • 进程可以拥有资源,并作为系统中拥有资源的一个基本单位
    • 线程本身不拥有系统资源,而是仅有一点必不可少的,能保证独立运行的资源

2.7.3 线程的状态和线程控制块

  • 线程运行的三个状态:执行状态、就绪状态、阻塞状态
  • 线程控制块称为TCB
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,186评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,858评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,620评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,888评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,009评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,149评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,204评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,956评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,385评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,698评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,863评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,544评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,185评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,899评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,141评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,684评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,750评论 2 351

推荐阅读更多精彩内容