
操作系统实验
文章平均质量分 65
noyyh
这个作者很懒,什么都没留下…
展开
-
proc文件系统的实现
实验内容 /proc文件系统是了解系统信息的一个窗口,它不是普通意义上的文件系统,它是一个到运行中进程地址空间的访问接口。通过/proc,可以用标准Unix系统调用(比如open()、read()、write()等等)访问,就象访问一个普通文件一样。事实上,许多操作系统中的ps命令正是利用/proc来获取进程状态的。因此/proc文件系统是虚拟的文件系统,看似存在的文件实际并没有在硬盘上。其实,/proc是你了解自己系统的一个窗口,它实际存在于内存。 在 Linux 0.11上实现 procfs(proc转载 2021-01-17 15:01:04 · 560 阅读 · 1 评论 -
信号量的实现和应用
一.添加信号量系统调用 1.修改unistd.h,如系统调用实验,需要将unistd.h的改动写到bochs中 /* add */ #include <sys/sem.h> /* end */ /* add */ #define __NR_sem_open 72 #define __NR_sem_wait 73 #define __NR_sem_post 74 #define __NR_sem_unlink 75 /* end */ /* add */ sem_t *sem_open(con转载 2021-01-16 19:45:13 · 316 阅读 · 0 评论 -
基于内核栈切换的进程切换
转载自https://www.lanqiao.cn/courses/reports/1420124/ 1 在 kernel/.sched.c 中修改 在适当位置定义全局变量 tss /* start */ struct tss_struct *tss = &(init_task.task.tss); /* end */ 修改 schedule() 函数中的 switch_to() 调用: switch_to(task[next],_LDT(next)); 2 在 include/linux/s转载 2021-01-16 09:38:40 · 199 阅读 · 0 评论 -
进程运行轨迹追踪统计
实验内容 N、J、R、W 和 E ,分别表示进程新建(N)、进入就绪态(J)、进入运行态(R)、进入阻塞态(W) 和退出(E); process.c是多进程的样本程序,实现如下功能: 所有子进程都并行运行,每个子进程的实际运行时间一般不超过 30 秒; 父进程向标准输出打印所有子进程的 id,并在所有子进程都退出后才退出; #include <stdio.h> #include <unistd.h> #include <time.h> #include <sys/t转载 2020-09-30 19:58:00 · 1472 阅读 · 0 评论 -
操作系统实验之系统调用
在unistd.h中可以看到现在Linux 0.11 支持3个参数的传递。添加参数的方法大概有3条 1. 可以采用ESI,EDI,EBP,ESP这几个寄存器传递参数。 2. 可以采用《Linux 0.11注释》中提到的系统调用门的办法。 3. 可以开辟一块用户态的空间,允许内核态访问,传递参数时,只需传递此空间的首地址指针即可。 向linux 0.11添加一个系统调用foo()的步骤: 首先。在内核中编写系统调用处理函数。 其次。在include/unistd.h中添加系统调用的功能号(#define转载 2020-09-29 14:50:14 · 1368 阅读 · 0 评论 -
操作系统课程之启动
bootsect.s代码是磁盘引导块程序,驻留在磁盘的第一个扇区中(0柱面,0磁头,第1个扇区)在pc机加点ROM BIOS自检后把引导扇区代码bootsect加载到内存地址0x7c00处执行。在bootsect代码执行期间,它将自己移动到内存绝对地址0x90000处继续执行。该程序的主要作用是把磁盘第2个扇区开始(bootsect后一扇区)的占2(SETUPLEN=2)个扇区的setup模块(由setup.s编译而成)加载到内存紧接着bootsect后面位置处(0x90200)[由于bootsect占一个转载 2020-09-28 20:34:25 · 190 阅读 · 0 评论