二、进程管理

引入

1. 程序:源代码程序、目标程序、可执行程序

2. 程序执行:编写、编译、链接、执行

3. 交换:将部分进程换出到外存,腾出内存空间。被换出去的进程处于挂起状态。只有挂起它的进程才能恢复被挂起的进程。

4. 虚拟存储:每个进程只能装入一部分程序和数据


进程描述及控制

1. 进程的概念

申请/拥有资源的单位

程序是静态概念,进程是存在于内存的动态概念,表现为程序的运行

2. 进程的结构

程序

数据集合

进程控制块PCB

PCB是进程存在的唯一标识,PCB代表着进程是不是存在

3. PCB的构成

(1)构成

进程标识信息

处理机状态信息

进程调度信息

其它信息

(2)组织方式

单一队列

通过链表组织成单一队列,适用进程数目不多,否则查找困难。插入、删除都麻烦

表格结构

PCB按照进程状态不同,组织成不同的表:就绪进程表、执行进程表、阻塞进程表

4. 进程的状态

(1)五状态

新建-->就绪

就绪-->被调度-->执行

执行-->时间到-->就绪

执行-->IO等待-->阻塞

执行-->完成-->终止

阻塞-->IO完成-->就绪


(a)某些系统,父进程可任何情况下终止子进程

(b)父进程终止、子进程必须终止

(2)具有挂起的进程状态图


(a)阻塞挂起,当事件发生时,变成就绪挂起

5. 进程的创建

(1)系统为进程分配唯一标识ID,PID

(2)主进程表增加表项,记录进程对应的PCB

(3)为进程分配空间:用户地址空间、用户栈空间、PCB空间。有共享内存,就建立链接

(4)初始化PCB:进程标识、状态

(5)建立链接:插入调度队列


进程调度

1. 调度方式

进程调度方式分为剥夺式和非剥夺两种。

IO阻塞并非剥夺,属于主动放弃CPU

2. 调度类型

长程调度:作业从外存调进来

中程调度:交换出去外存的挂起进程调进来

短程调度:

3. 调度算法

(1)FCFS先来先服务:非剥夺,对短时进程不公平,对IO型不公平。整个等待时间肯定长

(2)短进程优先:非剥夺,但是需要对进程进行排序,而且难以估算进程时间

(3)时间片轮转:分时联机系统,剥夺式,进程切换多,额外开销,时间片大小问题。对短进程有利,不利于IO型进程,中断太多不适合批处理

(4)基于优先级:典型的是剩余时间减少优先级提高、排队时间增加优先级提高。反馈调度法就是很好的一个实现。

(5)反馈调度法:根据历史执行情况进行调整,结合了优先级和时间片轮转调度思想

根据优先级分多个就绪队列,每个队列的时间片递增。

就绪队列0        时间片0         优先级高

就绪队列1       时间片1

...

就绪队列n       时间片n          优先级低


线程

1. 为什么引入线程

为了减少程序并发执行时系统所付出的额外开销,使系统有更好的并发性。比如有些应用场景,必须是多进程/多线程并发才能实现功能的,如果采用进程的话,需要增加创建进程时候的开销,另外就是进程切换的时候,要保护现场等,比线程切换复杂。

线程是进程的一个实体,自身不拥有系统资源,只拥有少许运行中必不可少的私有资源。线程可与同属一个进程的其它线程共享进程的全部资源。

2. 线程状态

就绪、阻塞、执行

一般没有挂起状态:因为挂起是指将程序和数据交换出去外存,而多个线程是共享程序和数据的。

3. 进程与线程区别

(1)进程是资源申请的最小单位,线程是系统调度的最小单位

(2)进程切换开销比线程切换要大,线程具有相同的地址空间,使得线程间通信同步容易

(3)进程有挂起,线程没有

(4)windows、linux采用多进程、多线程技术

           UNIX采用多进程、单线程技术

   java虚拟机采用单进程、多线程技术

   MS DOS采用单进程、单线程技术

4. 用户级线程和内核级线程

这个跟具体操作系统设计有关,而不是应用程序自己决定采用哪种的。

5. 线程阻塞会否造成进程阻塞

(1)如果是线程1等待线程2而阻塞,不会引起进程阻塞

(2)如果是线程1等待IO而阻塞,内核需要启动系统IO,控制从用户级转向内核级,会引起进程阻塞


互斥与同步

1. 同步:协作          互斥:竞争

2. 临界资源:一次只允许一个进程访问的资源。

    临界区:访问临界资源的那段代码

3. 互斥条件

    忙则等待

    有限等待

    空闲让进

    让权等待

4. 死锁和饥饿

5. 实现方法

(1)软件方法

(a)进程严格顺序使用临界区

(b)为临界区设置一个状态标志,“忙”和“空闲”。问题:同时进入了。



(c)先表明要进去,然后再看下对方进去没。问题:都不进去


(d)谦让一段时间,再重新尝试进去


(e)有序谦让



(2)硬件方法

(3)信号量方法

(a)信号量定义

信号量包括如下机构:

count:可用资源数

queue:阻塞进程队列

(b)原语

原子操作,操作系统保证了一次执行不可中断。

    wait(s) ==  P(s)       申请信号量,s--,判断s>=0则进入临界区,否则阻塞,s绝对值表示有多少个被阻塞的进程

signal(s) ==  V(s)       释放信号量,s++,判断s<=0,唤醒一个进程,s绝对值表示有多少个被阻塞的进程

(c)信号量类型

互斥信号量

资源信号量


经典问题

1. 生产者/消费者问题

(1)特点:生产者创建数据,消费者使用数据,用完就没了,消耗型的。生产者可以多个,消费者也可以多个。

(2)生产者消费者共享大小固定的缓冲区。假设缓冲区大小为n,有插入指针和取出指针

(3)要求:

生产者与生产者之间要互斥

生产者与消费者之间要互斥

生产者不能向满缓冲区写数据

消费者不能向空缓冲区取数据


e: 资源信号量,表示缓冲区大小

n:资源信号量,非空单元

x:互斥信号量,对缓冲区的操作权限

生产者:

wait(e)

wait(x)

生产数据

signal(x)

signal(n)


消费者:

wait(n)

wait(x)

取走数据

signal(x)

signal(e)



(4)资源信号量要先申请,然后再申请互斥信号量。也就是说多的要先申请。


2. 读者/写者问题

要求:

写者间互斥

写者读者间互斥

读者间可同时读

读完数据还在


(1)读者优先

读者:                                                                   

wait(x)

reader++;

if(reader == 1) 

wait(wsem)

signal(x)

读数据

wait(x)

reader--;

if(reader == 0)

signal(wsem)

signal(x)

写者:

wait(wsem)

写数据

signal(wsem)


(2)写者优先

读者:                                                                   

wait(z)

wait(rsem)

wait(x)

reader++;

if(reader == 1) 

wait(wsem)

signal(x)

signal(rsem)

signal(z)

读数据

wait(x)

reader--;

if(reader == 0)

signal(wsem)

signal(x)

写者:

wait(y)

writer++;

if(writer == 1)

wait(rsem)

signal(y)

wait(wsem)

写数据

signal(wsem)

wait(y)

writer--;

if(writer == 0)

signal(rsem)

signal(y)


进程通信

1. 进程通信类型

控制信息和数据信息

2.常用的进程通信机制

(1)共享存储区

(1.1)要求本地进程之间,数据空间固定

(1.2)同步互斥方式:

程序设计

操作系统实现:进程将存储区连接到本地进程中,互斥同步由操作系统实现,进程只管读写。


(2)消息传递

(2.1)消息格式

消息头:消息类型+目的地址+原地址+消息长度+控制信息

消息体:消息内容

Send原语:如果没有空闲的缓冲区,则进程阻塞;

Receive原语:如果缓冲区为空,则进程阻塞;

同步方式:

阻塞发送、阻塞接收

不阻塞发送、阻塞接收:发送进程不是一定要发送的,而接收进程一定要等有数据

不阻塞发送、不阻塞接收


(3)邮箱机制

邮箱:消息的容器

使用邮箱实现互斥同步:创建一个邮箱,里面有一条空消息。接收阻塞方式,读取时如果为空则阻塞,等待进入临界区;如果取到了,就进入临界区。


3. 死锁

(1)安全状态、不安全状态

(2)安全序列、安全算法


4. 哲学家算法

(1)问题描述

五个哲学家围成一桌,5碗面,五支筷子在面左右,同时获得两支筷子才能进食。

(2)死锁

        如果每个哲学家都申请自己右边的筷子,再申请左边的筷子,很容易进入死锁

wait(fork(i));

wait(fork(i+1 )mod 5);

eat;

signal(fork(i+1) mod 5);

signal(fork(i));

(3)解决方案

       增加一位服务员,先让4位哲学家进餐,4位哲学家竞争5支筷子,肯定有一个能够取得一对,然后再安排最后一位进餐。

room:semaphore(4)

wait(room)

wait(fork(i));

wait(fork(i+1 )mod 5);

eat;

signal(fork(i+1) mod 5);

signal(fork(i));

signal(room);

















### 回答1: Linux实验进程管理主要涉及到进程的创建、终止、查看和管理等方面。在Linux系统中,进程是操作系统中最基本的执行单元,它是程序在执行过程中的一个实例。通过进程管理,我们可以控制和管理系统中的各个进程,从而保证系统的稳定性和安全性。 在Linux系统中,我们可以使用命令行工具来进行进程管理。其中,常用的命令包括ps、kill、top、nice等。通过这些命令,我们可以查看系统中正在运行的进程、终止指定的进程、调整进程的优先级等。 此外,Linux系统还提供了一些图形化的进程管理工具,如System Monitor、htop等。这些工具可以更直观地显示系统中的进程信息,并提供更丰富的操作选项。 总之,进程管理是Linux系统中非常重要的一部分,它对于系统的稳定性和安全性具有重要的影响。掌握进程管理的基本原理和常用命令,可以帮助我们更好地管理和维护Linux系统。 ### 回答2: Linux实验进程管理主要涉及了进程的创建、运行、退出等基本操作。在Linux系统中,进程是系统资源调度的基本单位,也是程序运行的基本单位。因此,在Linux操作系统中,对于进程管理的实现显得十分重要。 在实验中,我们学习了如何通过编程的方式进行进程的创建。首先,我们需要使用fork()函数来创建新的进程。这个函数会在调用的进程内部生成一个子进程,子进程会与父进程共享代码、数据、文件等资源,并且这两个进程的运行是相对独立的。在子进程中可以使用exec()函数来加载新的程序,从而实现一个新的进程。在实验中,我们尝试了几种不同的fork()和exec()函数的组合方式,例如:子进程执行一个程序,子进程替换成另一个程序等。这些不同的方式可以更加灵活地控制进程的创建和运行。 其次,我们学习了如何使用信号来管理进程。在Linux系统中,信号是一种异步的通知机制,它可以在运行中的进程之间进行通信,例如进程的退出通知等。我们使用signal()函数来安装信号处理程序,这个处理程序会在特定的信号到来时执行。例如,我们尝试了在子进程中安装SIGINT信号处理程序,当在终端输入Ctrl+C时,子进程会捕获到这个信号并调用处理程序。 另外,我们学习了如何使用管道来进行进程间通信。在Linux系统中,管道是进程间通信的一种常用方式。我们使用pipe()函数来创建管道,然后使用fork()函数创建子进程和父进程,两个进程之间可以通过管道来传输数据。在实验中,我们使用管道来实现父进程向子进程发送数据的过程,这个过程需要通过write()函数写入数据到管道中,子进程可以通过read()函数来读取管道中的数据。 综上所述,实验进程管理是一个非常实用的实验,我们通过实验学习了进程的创建、运行、退出等基本操作,学会了如何使用信号和管道进行进程通信,掌握了进程管理中一些常用的技巧和方法,这些技能对于我们后续的Linux系统学习和工作都是非常有帮助的。 ### 回答3: Linux实验进程管理是计算机操作系统课程中的一项实验任务,主要涉及如何创建、管理和控制进程。本实验要求学生在Linux操作系统下使用命令行工具,通过编写和运行C程序来实现进程的创建和管理。 在Linux中,进程是操作系统的基本单位,每个进程都拥有自己的资源和内存空间。管理进程的操作可以通过Linux系统内核提供的一系列命令和系统调用来完成。常用的进程管理命令包括ps、kill、top等,它们可以帮助用户查看进程列表、杀死进程或者查看进程的状态。 本实验要求使用C语言编写程序并通过命令行编译执行。首先要实现进程的创建,通过fork系统调用可以创建一个子进程。父进程调用fork会返回子进程的pid,而子进程返回0,可以通过判断返回值来确定当前程序是父进程还是子进程。子进程可以调用exec系统调用来执行其他程序,从而实现进程间的交互和通信。 在进程管理中,还需要对进程进行调度和控制。可以通过信号来控制进程的行为,kill命令可以向指定进程发送不同的信号,例如SIGTERM信号可以结束进程,SIGINT信号可以停止进程。另外还可以使用nice命令来调整进程的优先级,通过top命令可以查看进程的状态和占用的系统资源。 总的来说,Linux实验进程管理是一项非常重要的实验任务,通过学习和实践可以帮助学生更深入地理解进程管理的原理和技术,为以后的系统管理和开发打下坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值