Uploaded by yb2002shiki

操作系统

advertisement
操作系统小学期汇报
https://www.ypppt.com/
目 录
1
任务描述
2
T a s k 1
3
T a s k 2
4
T a s k 3
5
T a s k 4
01
任务描述
基于xv6操作系统实现ps命令
任务2
添加信号
任务0
任务1
环境配置
实现进程相关的系统调用
任务3
任务4
实现虚拟文件系统 /proc
实现 ps 命令
任务0:相关环境配置
02
任务1
实现进程相关的系统调用
#1:getppid
步骤
•
在include/sysnum.h文件中,添加新系统
调用号的宏定义
•
在syscall.c文件中,添加功能函数的声明,
并更新系统调用表
•
在sysproc.c文件中,实现sys_getppid函
数的功能
•
在user.h文件中,添加新系统调用封装后的
函数声明。
•
在usys.pl文件末尾,添加新条目
•
添加测试代码
#2:times
实现思路
•
为每个进程维护一个tms结构体
•
在proc结构体中新增两个成员,分别表示进
程上次从用户态转为内核态和从内核态转为用
户态的时间
•
封装一个函数,用于返回当前时间,可以选择
使用r_time还是ticks
•
在trap.c和proc.c等进程状态切换的位置,
更新这些成员
•
在 进 程 回 收 前 , 更 新 其 父 进 程 的 cstime和
ustime成员
#2:times
实现思路
•
为每个进程维护一个tms结构体
•
在proc结构体中新增两个成员,分别表示进
程上次从用户态转为内核态和从内核态转为用
户态的时间
•
封装一个函数,用于返回当前时间,可以选择
使用r_time还是ticks
•
在trap.c和proc.c等进程状态切换的位置,
更新这些成员
•
在 进 程 回 收 前 , 更 新 其 父 进 程 的 cstime和
ustime成员
#2:times
实现思路
•
为每个进程维护一个tms结构体
•
在proc结构体中新增两个成员,分别表示进
程上次从用户态转为内核态和从内核态转为用
户态的时间
•
封装一个函数,用于返回当前时间,可以选择
使用r_time还是ticks
•
在trap.c和proc.c等进程状态切换的位置,
更新这些成员
•
在 进 程 回 收 前 , 更 新 其 父 进 程 的 cstime和
ustime成员
#3:getmem
实
现
思
路
getmem() 以 KiB(1024字节)为单位返回进程的虚拟
内存大小。
03
任务2
任务2需要完善alarm、pause、signal、kill系统调用以实现
信号相关功能
系统调用alarm
在这部分我们将实现一个新的系统调用 unsigned int alarm(unsigned int seconds) ,它将在指定的时间之
后向当前进程发送 SIGALARM 信号,这里无需实现信号接收部分,也就是说发出 SIGALARM 信号仅仅 kill() 掉
进程。获取滴答数之前给当前进程上锁、获取滴答数之后释放锁。
系统调用pause
在这部分,需要实现系统调用 void pause()。pause 暂停当前进程, 直到接收到一个信号。
系统调用signal
 这个复杂的函数原型表示 signal() 接受两个参数:sig 和 func ,func 指定接
收信号 sig 时的处理函数,这个函数必须以一个 int 作为参数并且其返回
类型为 void。
 signal() 函数返回一个同类型的函数,这是 sig 信号的旧处理函数,或者以
下两个特殊值中的其中一个:
1. SIG_IGN 忽略此信号;
2. SIG_DFL 为默认操作,即终止进程。
在这一步中,只需要支持 SIG_IGN (=1, 忽略) 和 SIG_DFL (=0,默认操作,
即终止进程)。
 如果第二个参数为一函数(非 SIG_DFL 或 SIG_ING ),那么收到信号
时就需要利用此函数来处理。
(信号处理函数只能运行在用户态)
系统调用signal
系统调用kill
到目前为止,我们只能通过 alarm 发出信号,但这一
系统调用只能用于在进程内发送与接收信号。
我们已经提到过利用 kill 可以在不同进程间发信号,
但 xv6 中已有的 kill 只能终止其他进程,而不能像我们
希望的那样,向其他进程发出信号。所以在这一部分,
我们需要将 kill(int pid) 扩展为 kill(int pid, int sig) ,使
得 kill()能够:
1. 向由 pid 指定的进程发送信号;
2. 发送任意信号,例如 SIGINT 和 SIGALARM 。
04
任务3
实现虚拟文件系统 /proc
实现思路
在 xv6 中,一个文件即为一个索引结点 inode ,
inode 中含有读写文件内容以及构成 inode 数据
的函数。这些 inode 函数将会调用硬件接口,
但事实上/proc 在磁盘上并不存在。
这里用32位文件分配表fat32来支持文件系统,
由于fat32不支持inode,这里定义结构体目录
项dirent来存储文件内容及其相关数据
实现思路
从分配表中读文件
初
始
化
文
件
分
配
表
写
入
分
配
表
05
任务4
基于之前完成的工作实现ps命令
实现思路
利用以上完成的各项任务来实现 ps
实现思路
 sysproc中procps()函数获取各个程序的info,通过procps执行
proc_ps使用copyout2()将进程信息拷贝到内核。
 系统中输入指令ps,执行sysproc中的procps,获取各个程序
info,procps执行proc_ps,把程序信息拷贝到内核,procinfo
中就是ps显示的内容。
感谢您的观看!
Download