学习笔记6 第三章的自学归纳

发布时间 2023-10-22 12:32:15作者: 20211422王俊凯

学习笔记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的输入。

遇到的问题

苏格拉底提问