学习笔记6 第三章的自学归纳
多任务处理
- 一般来说,多任务处理指的是同时进行几项独立活动的能力。在计算机技术中,指的是同时执行几个独立的任务。多任务处理是所有操作系统的基础,总的来说,它也是并行编程的基础。
进程的概念
- 进程是对映像的执行,操作系统内核将一系列执行视为使用系统资源的单一实体。系统资源包括内存空间、I/O设备以及最重要的CPU时间。在操作系统内核中,每个进程用一个独特的数据结构表示,即PROC结构体,它包含了某个进程的所有信息。
- 如下是一个PROC结构体
1.next是指向下一个PROC结构体的指针
2.ksp保存的堆栈指针
3.pid是一个进程的进程编号
4.status是当前状态
5.priority是进程调度优先级
6.kstack是进程执行时的堆栈
多任务处理系统
type.h文件
#define FREE 0
#define READY 1
#define SLEEP 2
#define ZOMBIE 3
typedef struct proc
{
struct proc *next;
int *ksp;
int pid;
int ppid;
int status;
int priority;
int kstack[SSIZE];
}
- type.h文件定义了系统常熟和表示进程的简单PROC结构体。
ts.s文件
- ts.s文件在32位GCC汇编代码中可实现进程上下文切换
queue.c文件
- 可实现队列和链表操作
进程同步
-
是指控制和协调进程交互以确保其正确执行所需的各项规则和机制
-
睡眠模式/等待:ksleep(int event)
-
唤醒操作:kwakeup(event)
进程终止
-
分为正常终止和异常终止
-
进程家族树:PROC child,sibling,*parent;
-
子进程,兄弟进程,父进程
-
等待子进程终止
-
无论何时,进程都能调用内核函数kwait等待僵尸子进程:pid = kwait(int *status)
Unix/Linux中的进程
1.进程来源
- 当操作系统启动时,操作系统内核的启动代码会强行创建一个PID=0初始进程执行初始进程P0
2.INIT和守护进程
- 当进程P1开始运行时,它将其执行映像更改为INIT程序。P1 开始复刻出许多子进程,P1的大部分子进程都是用来提供系统服务的。它们在后台运行,不与任何用户交互。
3.登录进程
- P1复刻了许多LOGIN进程,每个终端上一个,用于用户登录。
4.sh进程
- 当用户成功登录时,LOGIN进程会获取用户的gid和uid,从而称为用户的进程。他将目录更改为用户的主目录并执行列出的程序,通常是命令解释程序sh。
5.进程的执行模式
-
在Unix/Linux中进程以两种不同的模式执行,即内核模式和用户模式,简称Kmode和Umode。在每种执行模式下,一个进程有一个执行映像。
-
Umode只能通过中断,陷阱,系统调用三种方式进入Kmode
进程管理中的系统调用
- fork()、wait()、exec()、exit()
I/O重定向
-
文件流和文件描述符
-
文件流I/O和系统调用
-
重定向标准输入
-
如果用一个新打开的文件来替换文件描述符0,那么输入将来自该文件而不是原始输入设备。
-
重定向标准输出
-
更改文件描述符1,指向打开的文件名,然后stdout的输出将会转到该文件而不是屏幕;同样也可以将stderr重定向到一个文件。
管道
- 管道是用于进程交换数据的单向进程间通信通道。管道有一个读取端和一个写入端
- 管道命令处理
cmd1 | cmd2
sh将通过一个进程运行cmd1,并通过另一个进程运行cmd2,他们通过一个管道连接在一起,因此cmd1的输出变为cmd2的输入。
遇到的问题
苏格拉底提问