第三章学习笔记
第三章学习笔记
概要
本章讨论了 Unix/Linux 中的进程管理;阐述了多任务处理原则;介绍了进程概念;以一个编程示例来说明多任务处理、上下文切换和进程处理的各种原则和方法。
多任务处系统支持动态进程创建、进程终止,以及通过休眠与唤醒实现进程同步、进程关系,以及二叉树的形式实现进程家族树,从而允许父进程等待子进程终止;提供了一个具体示例来阐释进程管理函数在操作系统内核中是如何工作的;然后,解释了 Unix/Linux 中各进程的来源,包括系统启动期间的初始进程、INIT 进程、守护进程、登录进程以及可供用户执行命令的 sh 进程;接着,对进程的执行模式进行了讲解,以及如何通过中断、异常和系统调从用户模式转换到内核模式;
再接着,描述了用于进程管理的 Unix/Linux 系统调用,包括 fork、wait、exec 和 exit ;阐明了父进程与子进程之间的关系,包括进程终止和父进程等待操作之间关系的详细描述;解释了如何通过 INIT 进程处理孤儿进程,包括当前 Linux 中的 subreaper 进程,并通过示例演示了 subreaper 进程;接着,详细介绍了如何通过 exec 更改进程执行映像,包括 execve 系统调用、命令行参数和环境变量;解释了 1/0 重定向和管道的原则及方法,并通过示例展示了管道编程的方法。
学到了什么
1.多任务处理
一般来说,多任务处理指的是同时进行几项独立活的能力。比如,我们经常看到有人
一边开车一边打电话。从某种意义上说,这些人正在进行多任务处理,尽管这样非常不好。
在计算机技术中,多任务处理指的是同时执行几个独的任务。在单处理器(单CPU)系统
中,一次只能执行一个任务。多任务处理是通过在不同任务之间多路复用CPU的执行时间
来实现的,即将CPU执行操作从一个任务切换到另一个任务。不同任务之间的执行切换机
制称为上下文切换,将一个任务的执行环境更改为另个任务的执行环境。如果切换速度
足够快,就会给人一种同时执行所有任务的错觉这种逻辑并行性称为“并发”。在有多个
CPU或处理器内核的多处理器系统中,可在不同CPU上实时,并行执行多项任务。此外,
每个处理器也可以通过同时执行不同的任务来实现多任处理。多任务处理是所有操作系统的基础。总体上说,它也是并行编程的基础。
2.进程的概念
操作系统是一个多任务处理系统。在操作系统中,任务也称为进程在实际应用中,任
务和进程这两个术语可以互换使用。
进程的正式定义:
- 进程是对映像的执行。
操作系统内核将一系列执行视为使用系统资源的单一实体。系统资源包括内存空间
/O设备以及最重要的CPU时间。在操作系统内核中,每个进程用一个独特的数据结构表
示,叫作进程控制块(PCB)或任务控制块(TCB)等。在本书中,我们直接称它为PROC
结构体。与包含某个人所有信息的个人记录一样,PROC结构体包含某个进程的所有信息
在实际操作系统中,PROC结构体可能包含许多字段,而且数量可能很庞大。首先,我们来
定义一个非常简单的PROC结构体来表示进程。
- queue.c文件
queue.c文件可实现队列和链表操作函数。enqueue()函数按优先级将PROC输入队列中。在优先级队列中,具有相同优先级的进程按照FIFO的顺序排序。dequeue()函数可返回从队列或链表中删除的第一个元素。printList()函数可打印链表元素。
- t.c文件
t.c文件定义MT系统数据结构、系统初始化代码和进程管理函数
I/O重定向是一个过程,这个过程捕捉一个文件、命令、程序或脚本,甚至代码块的输出,然后把捕捉到的输出作为输入发送给另外一个文件、命令、程序或脚本。
I/O重定向符号
I/O重定向符号分为:基本I/O重定向符号和高级I/O重定向符号(与exec命令有关)。
实践:
Env:
Ulimit: