首页 > 其他分享 >第三章学习笔记

第三章学习笔记

时间:2022-10-09 16:45:11浏览次数:56  
标签:调用 第三章 操作系统 系统 笔记 学习 终止 进程 多任务处理

本章讨论了 Unix/Linux 中的进程管理;阐述了多任务处理原则;介绍了进程概念;以一个编程示例来说明多任务处理、上下文切换和进程处理的各种原则和方法。
多任务处理系统支持动态进程创建、进程终止,以及通过休眠与唤醒实现进程同步、进程关系,以及以二叉树的形式实现进程家族树,从而允许父进程等待子进程终止;提供了一个具体示例来阐释进程管理函数在操作系统内核中是如何工作的;然后,解释了Unix/Linux中各进程的来源,包括系统启动期间的初始进程、INIT进程、守护进程、登录进程以及可供用户执行命令的sh进程;接着,对进程的执行模式进行了讲解,以及如何通过中断、异常和系统调用从用户模式转换到内核模式;再接着,描述了用于进程管理的Unix/Linux系统调用,包括fork、wait,exec和exit ;阐明了父进程与子进程之间的关系,包括进程终止和父进程等待操作之间关系的详细描述;解释了如何通过INIT进程处理孤儿进程,包括当前Linux 中的subreaper进程,并通过示例演示了subreaper进程;接着,详细介绍了如何通过exec更改进程执行映像,包括execve系统调用、命令行参数和环境变量;解释了LI/O重定向和管道的原则及方法,并通过示例展示了管道编程的方法;读者可借助本章的编程项目整合进程管理的各种概念和方法,实现用于执行命令的sh模拟器。sh模拟器的功能与标准sh完全相同。它支持简单命令、具有1/O重定向的命令和通过管道连接的多个命令的执行。

1、多任务处理

32位windows操作系统中,多任务处理是指系统可同时运行多个进程,而每个进程也可同时执行多个线程。一个线程是指程序的一条执行路径,它在系统指定的时间片中完成特定的功能。系统不停地在多个线程之间切换,由于时间很短,看上去多个线程在同时运行。或者对于在线程序可并行执行同时服务于多个用户称为多任务处理。
引入多任务处理是为了提高CPU的利用率。Windows、IOS、Android等操作系统都支持多任务处理。Windows 中的前台与后台任务都能分配到CPU的使用权。

2、进程的概念

狭义定义:进程是正在运行的程序的实例。
广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。
进程的概念主要有两点:第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。

3、进程同步

一组进程为了协调其推进速度,在某些地方需要相互等待或者唤醒,这种进程间的相互制约就被称作是进程同步。这种合作现象在操作系统和并发式编程中属于经常性事件。
进程同步机制
信号量与PV操作
这个进程同步机制应该算的上是古董级的了,这种机制的主要思想就是——通过将资源数量化,将申请资源和释放资源的动作具体化,从而达到对资源的操作及结果可视化的程度。

4、进程终止

在操作系统中,进程可能终止或死亡,这是进程终止的通俗说法。如第2章所述,进程能以两种方式终止:
·正常终止:进程调用 exit(value),发出_exit(value)系统调用来执行在操作系统内核中的 kexit(value),这就是我们本节要讨论的情况。
·异常终止:进程因某个信号而异常终止。信号和信号处理将在后面第 6 章讨论。
在这两种情况下,当进程终止时,最终都会在操作系统内核中调用 kexit()。

5、进程管理的系统调用

 

1)创建(fork)
为什么需要这么一个系统调用呢,因为我们的系统在最开始启动后并不会有太多的进程,需要有一个系统调用能够在接下来的使用中创建更多的进程。例如我们的shell,可以在shell中使用命令创建一个进程。
fork就像一把叉子,主要完成
1、做一份进程完整的复制(内存、寄存器运行现场)
2、父进程返回子进程的pid,子进程返回0
那么创建一个进程为什么要叫做叉子呢?还是以我们刚才的qq进程为例,如果它调用了fork系统调用就会在当前系统中多出一个进程,而这个进程是之前qq进程的拷贝,它包括几乎所有的进程当前的状态(除了返回值pid),包括内存、寄存器。原来的进程也叫父进程和新创建的进程也叫子进程都可以继续向下执行,所以说它像一个叉子,走着走着就分了个叉。父进程返回值是子进程的pid,子进程的返回值是0。

6、I/O重定向

1)I/O重定向是一个过程,这个过程捕捉一个文件、命令、程序或脚本,甚至代码块的输出,然后把捕捉到的输出作为输入发送给另外一个文件、命令、程序或脚本。

2)文件描述符
文件描述符是从0开始到9的结束的整数,指明了与进程相关的特定数据流的源。当Linux系统启动一个进程(该进程可能用于执行shell命令)时,将自动为该进程打开三个文件:标准输入(文件标识符为0)、标准输出(1标识)和标准错误输出(2标识),若要打开其他的输入或输出文件则从整数3开始标识。默认情况下,标准输入与键盘输入相关联,标准输出与标准错误输出与显示器相关联。

五、学习体会以及最有收获的内容

本次学习我最有收获的内容是熟悉了linux下进程特点、创建、管理过程以及进程和程序的区别。在 Linux系统中,每一个进程都有一个识别号PID(Process ID),用以区分不同的进程,系统启动后的第一个进程是init,它的PID是1。init是唯一一个由系统内核直接运行的进程。新的进程可以用系统调用 fork来产生,就是从一个已存在的旧进程分聘个新进程来,旧进程是新产生进程的父进程,新进程是产生它的进程的子进程,除了init之外,每一个进程都有一个父进程。当系统启动后,init进程会创建login进程等待用户登录系统,用户登录后,login进程会为用户启动shell进程,而此后用户运行的进程都是由shell衍生出来的。

 

标签:调用,第三章,操作系统,系统,笔记,学习,终止,进程,多任务处理
From: https://www.cnblogs.com/luoyunfan/p/16772694.html

相关文章

  • Python学习实验报告03——序列
    实验要求:完成课本实例部分及实战部分实验内容:Part1实例:实例01:创建一个文件命名为tips,导入日期时间类,定义一个包含七条励志文字的列表,获取当前星期作为索引输出每日一......
  • k8s笔记1
    1、watch后的命令不能使用别名alias#watchkgetpod-nkube-system-owidesh:k:未找到命令#watchkubectlgetpods--all-namespaces2、 k8s-master02状态:NotReady,......
  • 详解线性分类-逻辑回归(Logistic Regression)【白板推导系列笔记】
    一点最大后验估计的理解,不知道该写哪,就放这里了最大后验估计是根据经验数据获得对难以观察的量的点估计。与最大似然估计类似,但是最大的不同是,最大后验估计的融入了要估计......
  • 《Unix&Linux系统编程》第三章学习笔记
    第3章Unix/Linux进程管理3.1多任务处理多任务处理指同时执行几个独立的任务。在单CPU系统中一次只能执行一个任务。多任务处理是通过在不同任务之间多路复用CPU的执行......
  • SQL学习笔记
    1.创建数据库、显示数据库、使用数据库mysql>   create database test;mysql>   showdatabases;mysql>   usetest;2.创建数据表、插入数据+-----......
  • 测试基础学习 - mysql
    mysql介绍MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,属于Oracle旗下产品。MySQL将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度......
  • 第六周学习笔记
    第3章Unix/Linux进程管理摘要Unix/Linux中的进程管理;阐述了多任务处理原则;介绍了进程概念;说明多任务处理、上下文切换和进程处理的各种原则和方法。讲解进程的......
  • mysql中set和enum枚举类型插入值和索引比较--笔记
    set,enum的数据类型都是字符串类型的对象,其中set最多可以包含64个元素,并且可以任意取到集合中的元素。而enum则是只能取到集合中的木一个元素,最多包含65536个元素,也就是说se......
  • let、const命令(学习阮一峰ES6记录)
    1.let命令ES6新增let命令,作用和var类似,用来声明变量,但是let只能在所在代码块(区域)中使用。例:1{2leta=2;3varb=3;4}5console.log(a)//aisn......
  • ArrayList源码学习
    arraylist1、总体关系图  1.1:Serializable接口这是一个空接口,只有实现了这个接口的对象才可以进行序列化。然后这个序列化id是为了保证反序列化成功也就是在运......