学习笔记6

自学教材第3章,提交学习笔记(10分)


知识点归纳以及自己最有收获的内容 (3分)
问题与解决思路(2分)
实践内容与截图,代码链接(3分)
...(知识的结构化,知识的完整性等,提交markdown文档,使用openeuler系统等)(2分)


Unix/Linux进程管理思维导图

Unix/Linux进程管理知识点归纳
本章讨论了 Unix/Linux 中的进程管理;阐述了多任务处理原则;介绍了进程概念;
以一个编程示例来说明多任务处理、上下文切换和进程处理的各种原则和方法。
多任务处系统支持动态进程创建、进程终止,以及通过休眠与唤醒实现进程同步、进程关系,以及二叉树的形式实现进程家族树,从而允许父进程等待子进程终止;
提供了一个具体示例来阐释进程管理函数在操作系统内核中是如何工作的;
解释了 Unix/Linux 中各进程的来源,包括系统启动期间的初始进程、INIT 进程、守护进程、登录进程以及可供用户执行命令的 sh 进程;
对进程的执行模式进行了讲解,以及如何通过中断、异常和系统调从用户模式转换到内核模式;
描述了用于进程管理的 Unix/Linux 系统调用,包括 fork、wait、exec 和 exit ;
阐明了父进程与子进程之间的关系,包括进程终止和父进程等待操作之间关系的详细描述;
解释了如何通过 INIT 进程处理孤儿进程,包括当前 Linux 中的 subreaper 进程,并通过示例演示了 subreaper 进程;
详细介绍了如何通过 exec 更改进程执行映像,包括 execve 系统调用、命令行参数和环境变量;解释了 I/0 重定向和管道的原则及方法,并通过示例展示了管道编程的方法。
多任务处理
书中P87为我们介绍了多任务处理的概念,
一般来说,多任务处理指的是同时进行几项独立活动的能力。在计算机技术中,多任务处理指的是同时执行几个独立的任务。

在单处理器(单CPU)系统中,一次只能执行一个任务。
多任务处理是通过在不同任务之间多路复用CPU的执行时间来实现的,即将CPU执行操作从一个任务切换到另一个任务。
不同任务之间的执行切换机制称为上下文切换,将一个任务的执行环境更改为另一个任务的执行环境。
如果切换速度足够快,就会给人一种同时执行所有任务的错觉。这种逻辑并行性称为“并发”。
在有多个CPU 或处理器内核的多处理器系统中,可在不同CPU上实时、并行执行多项任务。此外,每个处理器也可以通过同时执行不同的任务来实现多任务处理。多任务处理是所有操作系统的基础。总体上说,它也是并行编程的基础。进程进程是对映像的执行。

多道程序系统中,程序具有:并行、制约以及动态的特征。程序概念难以便是和反映系统中的情况。

1. 程序是一个静态的概念

程序是完成某个功能的指令集和。系统实际上是出于不断变化的状态中,程序不能反映这种动态性。

2. 程序概念不能反映系统中的并行特性

例如:两个C语言源程序由一个编译程序完成编译,若用程序概念理解,内存中只有一个编译程序运行(两个源程序看作编译程序的输入数据),但是这样无法说明白内存中运行着两个任务。程序的概念不能表示这种并行情况,反映不了他们活动的规律和状态变化。就像不能用菜谱(程序)代替炒菜(程序执行的过程)一样(这句话我稍微修改了一下,感觉应该是这样表诉才对)。

二、进程的定义

进程:一个具有一定独立功能的程序关于某个数据集合的一次运行活动,是系统进行资源分配和调度运行的基本单位。

三、进程与程序的差别

1. 进程是一个动态的概念

进程是程序的一次执行过程,是动态概念。

程序是一组有序的指令集和,是静态概念。

2. 不同的进程可以执行同一个程序

区分进程的条件:所执行的程序和数据集合。

两个进程即使执行在相同的程序上,只要他们运行在不同的数据集合上,他们也是两个进程。例如:多个用户同时调用同一个编译程序编译他们编写的C语言源程序,由于编译程序运行在不同的数据集合(不同的C语言源程序)上,于是产生了一个个不同的进程。

3. 每个进程都有自己的生命周期

当操作系统要完成某个任务时,它会创建一个进程。当进程完成任务之后,系统就会撤销这个进程,收回它所占用的资源。从创建到撤销的时间段就是进程的生命期。

4. 进程之间存在并发性

在一个系统中,同时会存在多个进程。他们轮流占用CPU和各种资源。

5. 进程间会相互制约

进程是系统中资源分配和运行调度的单位,在对资源的共享和竞争中,必然相互制约,影响各自向前推进的速度。

6. 进程可以创建子进程,程序不能创建子程序

7.从结构上讲,每个进程都由程序、数据和一个进程控制块(Process Control Block, PCB)组成

四、进程的重要特征


1. 动态特征:进程对应于程序的运行,动态产生、消亡,在其生命周期中进程也是动态的。


2. 并发特征:任何进程都可以同其他进程一起向前推进。


3. 独立特征:进程是相对完整的调度单位,可以获得CPU,参与并发执行。


4. 交往特征:一个进程在执行过程中可与其他进程产生直接或间接关系。


5. 异步特征:每个进程都以相对独立、不可预知的速度向前推进。


6. 结构特征:每个进程都有一个PCB作为他的数据结构。


进程最基本的特征是并发和共享特征。


五、进程的状态与转换


1. 进程的三种基本状态


a. 运行状态:获得CPU的进程处于此状态,对应的程序在CPU上运行着。

b. 阻塞状态:为了等待某个外部事件的发生(如等待I/O操作的完成,等待另一个进程发来消息),暂时无法运行。也成为等待状态。

c. 就绪状态:具备了一切运行需要的条件,由于其他进程占用CPU而暂时无法运行。

2. 进程状态转换


a. 运行状态 ===> 阻塞状态:例如正在运行的进程提出I/O请求,由运行状态转化为阻塞状态。

b. 阻塞状态 ===> 就绪状态:例如I/O操作完成之后,由阻塞状态转化为就绪状态。

c. 就绪状态 ===> 运行状态:例如就绪状态的进程被进程调度程序选中,分配到CPU中运行,由就绪状态转化为运行状态。

d. 运行状态 ===> 就绪状态:处于运行状态的进程的时间片用完,不得不让出uCPU,由运行状态转化为就绪状态。

3. 进程的类型


a. 系统进程:操作系统用来管理资源的进程,当系统进程处于运行态时,CPU处于管态,系统之间的关系由操作系统负责。

b. 用户进程:操作系统可以独立执行的的用户程序段,当用户进程处于运行态时,CPU处于目态,用户进程之间的关系由用户负责。

多任务处理系统

type.h文件


type.h文件定义了系统常数和表示进程的简单PROC结构体。

ts.s文件

ts.s在32位GCC汇编代码中可实现进程上下文切换。

queue.c文件


queue.c文件可实现队列和链表操作函数。
enqueue()函数按优先级将PROC输入队列。在优先级队列中,具有相同优先级的进程按先进先出(FIFO).
dequeue()函数可返回从队列或链表中的第一个元素。printlist()函数可打印链表元素。

t.c文件


t.c文件定义MT系统数据结构、系统初始化代码和进程管理函数。


进程同步

进程同步是指控制和协调进程交互以确保其正确执行所需的各项规则和机制。

最简单的进程同步工具是休眠和唤醒操作。

睡眠模式:

有时候,进程需要等待直到某个特定的事件发生,例如设备初始化完成、I/O 操作完成或定时器到时等。
在这种情况下,进程则必须从运行队列移出,加入到一个等待队列中,这个时候进程就进入了睡眠状态。
为实现休眠操作,我们可以在 PROC结构体中添加一个event字段,并实现ksleep(int event)函数,使进程进入休眠状态。

进程睡眠状态有两种:

一种是可中断的睡眠状态,其状态标志位TASK_INTERRUPTIBLE
另一种是不可中断的睡眠状态,其状态标志位为TASK_UNINTERRUPTIBLE

唤醒操作:

当某个等待时间发生时,另一个执行实体(可能是某个进程或中断处理程序)将会调用 kwakeup(event)。
唤醒正处于休眠状态等待该事件值的所有程序。
如果没有任何程序休眠等待该程序,kwakeup()就不工作,即不执行任何操作。


进程终止

正常终止:进程调用exit(value),发出_exit(value)系统调用来执行在操作系统内核中的kexit(value)。

异常终止:进程因某个信号而异常终止。


I/O重定向

(1)文件流和文件描述符

每个文件流都是指向执行映像堆区中FILE结构体的一个指针。每个文件流对应Linux内核中的一个打开文件。每个打开文件都用一个文件描述符(数字)表示。

(2)文件流I/O和系统调用

当进程执行库函数

 scanf("%s",&item);

它会试图从stdin文件输入一个(字符串)项,指向FILE结构体。如果FILE结构体的fbuf[]

 实践操作

我们可以通过 ps 命令得到一个进程列表
ps [options] [--help]
-A,显示所有进程信息

 问题和解决

问题:linux下计算机如何实现多任务处理

解决:多任务处理是指用户可以在同一时间内运行多个应用程序,每个应用程序被称作一个任务.Linux就是一个支持多任务的操作系统,比起单任务系统它的功能增强了许多.

当多任务操作系统使用某种任务调度策略允许两个或更多进程并发共享一个处理器时,事实上处理器在某一时刻只会给一件任务提供服务。因为任务调度机制保证不同任务之间的切换速度十分迅速,因此给人多个任务同时运行的错觉。多任务系统中有3个功能单位:任务、进程和线程。

当操作系统使用某种策略允许两个或更多进程并发共享一个CPU时,它称作多任务运行,或多道程序运行.在规定的时间片过期或某些事件发生前,一直执行某个进程.然后,操作系统切换到另一个进程.这种切换十分迅速,给人一种这些进程是同时执行的错觉.而事实上,同一时刻在一个CPU上只能激活一个进程.这种进程间的切换在所有进程完成前一直进行.并发共享策略决定何时切换进程.该策略由操作系统或其他进程强制执行.

多任务可以分为3个级别:对话级,进程级,线程级.

任务是一个逻辑概念,指由一个软件完成的活动,或者是一系列共同达到某一目的的操作.通常一个任务是一个程序的一次运行,一个任务包含一个或多个完成独立功能的子任务,这个独立的子任务是进程或者是线程. 任务、进程和线程之间的关系:

 

对话级多任务

对话间的多任务由用户控制.用户运行若干应用程序或对话.对话创建一个虚拟计算机以及它的键盘,鼠标和屏幕.当执行一个应用程序或对话时.用户可以决定切换到另一个应用程序或对话. 如上图,当前SecureCRT是处于前台的,而其他窗口(用于编写博客的Chrome浏览器)是在后台,那么何为前台,后台呢?针对进程,拥有控制终端(当前交互的)的属于前台,而没有控制终端的属于后台进程;如同时打开SecureCRT和Chrome浏览器,当使用SecureCRT进行操作时,SecureCRT属于前台,而Chrome在后台执行;当然前台和后台是可以切换的,即上下文切换,这个切换由用户控制,所以称之为用户控制多任务.永久的后台进程一般叫守护进程.

进程级多任务

在对话中可以并发激活多个进程,这些进程相互合作来完成一个最终任务.例如,要完成这样一个任务:列出系统中所有由用户A启动的进程.该任务由两个进程组成,第一个进程要搜索系统中所有运行着的系统信息,这些内容通过管道传给对话中的另一个进程(第二个进程),这个进程可以过滤处包含用户A启动的进程信息.这两个进程按序列逐个地执行,最后得到系统中所有由用户A启动的进程.所有的进程共享CPU运行,一个进程运行一段时间,然后另一个进程再运行一段时间.操作系统控制进程间的切换,直到所有的进程运行完成.对于这样一种多个进程并发执行的多任务实现方式,称做进程级多任务. 进程是运行着的程序,是操作系统执行任务的基本单位.进程具备文本,数据和堆栈片断,以及它自己的资源.资源可以是文件,对象句柄,设备,信号量,互斥量,管道等等.操作系统管理进程以及它的资源.每个进程有着独立的运行环境,进程与进程间是相互隔离但又相互联系的,一个进程运行出错不会影响到其他的进程运行,两个进程之间可以通过管道等方式通信,或者通过信号量的工具同步运行.因此,进程是实现多任务处理的核心单元,我们将在后面的内容中详细的讨论它.

线程级多任务

进程完成单独的任务,每个任务又可能有自己的控制流程.这些流程由轻量级的进程构成,称做线程.进程的线程并发执行称做线程级多任务.让我们详细看看这个级别的多任务是如何相互作用的.当用户使用鼠标或键盘上的按键从一个对话移到另一个对话时,发生的是对话间的多任务.用户从当前对话切换到另一个对话,使得当前对话成为后台对话,同时激活了另一个对话,这时将发生上下文切换.进行上下文切换任务的进程或者线程抢占或释放了对处理器的控制权,而另一个进程或线程随即释放或得到了处理器的控制权. 在窗口系统中每时每刻都在进行着上下文切换,而进程级的上下文切换代价十分昂贵,频繁的切换不但不能体现多任务系统的优,反而降低了系统的整体反应速度.线程是轻量级的进程,它由进程创建,并与创建它的进程工作在同一内存空间中,不但可以与同一进程中的其他线程共享数据和文件描述符,而且线程间的切换过程也是十分快捷和低成本的.因此越来越多的多任务处理在底层都采取线程来实现.

原文地址:https://www.cnblogs.com/stx3220665294/p/15452152.html