学习笔记六

一、第三章
3.1多任务管理
多任务处理指的是同时进行几项独立活动的能力,这是所有操作系统的基础,也是并行编程的基础
3.2进程的概念
操作系统是一个多任务处理系统,任务也称作进程。
进程的正式定义:进程是对映像的执行
操作系统内核将一些列执行视为使用系统资源的单一实体,包括内存空间、I/O设备以及最重要的CPU时间,每个进程用一个独特的数据结构表示,叫做进程控制块或任务控制块
3.3多任务处理系统
多任务处理系统简称MT,由以下几个部分组成。
3.3.1type.h文件
定义了系统常数和表示进程的简单PROC结构体

/*********** type.h file ************/
#define NPROC   9
#define SSIZE 1024
// PROC status
#define FREE    0
#define READY   1
#define SLEEP   2
#define ZOMBIE  3
typedef struct proc{
    struct proc *next;
    int *ksp;
    int pid;
    int status;
    int priority;
    int  kstack [SSIZE];
}PROC;

3.3.2ts.s文件
在32位GCC汇编代码中可实现进程上下切换
3
3.3.3queue.c文件
可实现队列和链表操作函数。enqueue()函数按优先级将PROC输入队列中。在优先级队列中,具有相同优先级的进程按先进先出的顺序排序。dequeue()函数可返回从队列或链表中删除的第一个元素。printList()函数可打印链表元素。
3.3.4t.c文件
t.c文件定义MT系统数据结构、系统初始化代码和进程管理函数
3.3.5多任务处理系统代码介绍
(1)虚拟CPU:MT系统在Linux下编译链接为gcc -m32 t.c ts.s,然后运行a.out。
(2)init():当MT系统启动时,main()函数调用init()以初始化系统
(3)P0调用kfork()来创建优先级为1的子进程P1,将其输入就绪队列中
(4)tswitch():实现进程上下切换
(4).1 tswitch()中的SAVE函数:把返回地址保存在堆栈上
(4).2 scheduler():选择下一个正在执行的任务
(4).3 tswitch()的RESUME函数:转而指向另一个任务的PROC
(5)kfork():创建一个子任务并将其输入readyQueue
(6)body():所有创建的任务都执行同一个body()函数
f:kfork一个新的子进程来执行body()
s:切换进程
q:终止进程
(7)空闲任务P0:具有最低的优先级
(8)运行多任务处理系统:gcc-m32 t.c s.s
3.4进程同步
3.4.1睡眠模式
当某进程需要某些当前没有的东西,就会在某个事件值上进入休眠状态
3.4.2唤醒操作
唤醒正在休眠状态等待该事件值的所有程序
3.5进程终止
正常终止:进程调用exit,发出_exit(value)系统调用来执行在操作系统内核中的kexit(value)
异常终止:进程因某个信号而异常终止
3.6MT系统中的进程管理
用二叉树的形式实现进程家族树
实现ksleep()和kwakeup()进程同步函数
实现kexit()和kwait()进程管理函数
添加“w”命令来测试和演示等待操作
3.7Unix/linux中的进程
1.进程来源
  当操作系统启动时,操作系统内核的启动代码会强行创建一个PID=0的初始进程。然后系统执行它。在初始化系统后,P0复刻一个子进程P1,并把进程切换为以用户模式运行P1。

2.INIT和守护进程
  P1的大部分子进程都是用来提供系统服务的。它们在后台运行,不与任何用户交互。它们被称为守护进程。

3.登录进程
  除了守护进程,P1复刻了许多登录进程,每个终端上一个,用于用户登录。每个登录进程打开三个与自己的终端相关联的文件流(stdin, stdout, stderr).

4.sh进程
  当用户成功登录时,LOGIN 进程会获取用户的 gid 和 uid,从而成为用户的进程。它将目录更改为用户的主目录并执行列出的程序,通常是命令解释程序 sh。现在,用户进程执行sh,因此用户进程通常称为 sh 进程。它提示用户执行命令。一些特殊命令,如cd(更改目录)、退出、注销等,由sh 自己直接执行。其他大多数命令是各种 bin 目录(如/bin、/sbin、/usr/bin、/usr/local/bin 等)中的可执行文件。对于每个(可执行文件)命令,sh 会复刻一个子进程,并等待子进程终止。子进程将其执行映像更改为命令文件并执行命令程序。子进程在终止时会唤醒父进程 sh,父进程会收集子进程终止状态、释放子进程 PROC 结构体并提示执行另一个命令等。除简单的命令之外,sh 还支持 I/O 重定向和通过管道连接的多个命令。

5.进程的执行模式
(1)中断:中断是外部设备发送给 CPU的信号,请求 CPU 服务。当在 Umode 下执行时,CPU 中断是启用的,因此它将响应任何中断。在中断发生时,CPU 将进入 Kmode 来处理中断,这将导致进程进人 Kmode。
(2)陷阱:陷阱是错误条件,例如无效地址、非法指令、除以0等,这些错误条件被 CPU识别为异常,使得 CPU 进入 Kmode 来处理错误。在 Unix/Linux 中,内核陷阱处理程序将陷阱原因转换为信号编号,并将信号传递给进程。对于大多数信号,进程的默认操作是终止。
(3)系统调用:系统调用(简称syscall)是一种允许 Umode 进程进入 Kmode 以执行内核函数的机制。当某进程执行完内核函数后,它将期望结果和一个返回值返回到 Umode,该值通常为0(表示成功)或-1(表示错误)。如果发生错误,外部全局变量errno(在 errno.h中)会包含一个 ERROR 代码,用于标识错误。
3.9I/O重定向
1.文件流和文件描述符
  每个文件流对应Linux内核中一个打开文件。它们都用一个文件描述符表示。
stdin、stdout、stderr的文件描述符分别为0、1、2。

2.管道与管道命令
  管道是用于进程交换数据的单向进程间同此你通道。有一个读取端和一个写入端。
在Unix/Linux中,命令行cmd1|cmd2包含一个管道符号“|”。Sh将通过一个进程运行cmd1,另一个运行cmd2。
在这里插入图片描述
3.10管道
  管道是用于进程交换数据的单向进程间通信的通道。管道有一个输入端、一个输出端。在之前我们使用man -k | grep xx时,就用到管道的功能。
  管道的使用可以通过程序完成,也可以在命令行中处理完成。
二、苏格拉底提问
进程的概念
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
I/O重定向
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
三、实践

  1. ps -ef|grep root
    在这里插入图片描述
  2. fork 练习
    在这里插入图片描述
    在这里插入图片描述
    四、疑问
    在这里插入图片描述

五、代码上传
https://gitee.com/zhou-zhecheng/emotion/issues/I89UII

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值