操作系统引导
bootsect.s
- 实现屏幕输出
- 修改打印的字符串(空白也算作一个字符)
- 读入setup.s代码(包括:设置驱动器、磁头,读取setup.s的磁道和扇区,并跳到相应位置开始执行)
setup.s
- (和bootsect.s中部分代码相同)打印相关信息
- (原代码已经可以部分打印硬件信息)需要在相关位置嵌入msg实现打印提示信息功能
build.c
- 将bootsect.s、setup.s、system.s编译、链接生成Image文件
系统调用
- unistd.h文件:添加系统调用功能号
- sys.h声明新的系统调用处理函数;添加系统调用处理程序索引值到指针数组表中
- system_call.s中增加系统调用总数
- makefile添加新的系统调用所在文件的编译链接规则(依赖关系)
进程运行轨迹的跟踪与统计
process.c
- 涉及到fork()和wait()系统调用
- 主要实现了一个函数——cpuio_bound()
- 用fork()建立若干个同时运行的子程序
- 父P等待所有子P退出后才退出,每个子P性质通过cpuio_bound()控制性质
fork.c
- fork系统调用函数
main.c
- 内核的入口函数main(),对它的修改是增加日志创建语句,并将log文件关联到文件描述符log文件记录进程状态转换轨迹
kernel
主要寻找进程状态转换点:
- printk.c
- sched.c
- exit.c
信号量的实现和应用
sem_open
- 打开信号量
sem_wait
- 信号量P操作——value–
sem_post
- 信号量V操作——value++
sem_unlink
- 释放信号量
地址映射与共享
shm.c
- shmget():得到一个共享内存标识符或创建一个共享内存对象并返回共享内存标识符
- shmat():连接共享内存标识符为shmid的共享内存,连接成功后把共享内存区对象映射到调用进程的地址空间,随后可像本地空间一样访问
sem.c
实现信号量的四种操作,与实验四相同
字符显示的控制
keyboard.S
- 添加对字符F12的输入判断
console.c
- 添加输出到控制台的字符控制
file_dev.c
- 添加输出到文件的字符控制
The link of this page is https://blog.nooa.tech/articles/86743755/ . Welcome to reproduce it!