![](https://img-blog.csdnimg.cn/20190927151117521.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
操作系统
文章平均质量分 71
操作系统
轻闲一号机
这个作者很懒,什么都没留下…
展开
-
【操作系统】操作系统实验04-文件系统扩展
实现方法:利用递归的思想,处理完当前节点后,判断此节点是否为目录节点(以此判断是否有子节点);若是,则先递归处理该节点,实现深度优先遍历;若不是,则不做处理。利用队列存储当前目录下的子目录,当当前层遍历完后,从队列中取出头结点,对下一层文件进行遍历,以此规律实现广度优先遍历。实验中遇到的问题与解决方法:(深度优先遍历程序)运行程序,结果出现了无限循环的问题。最终发现是因为每个目录下默认有”.”与”..”的隐藏目录文件,因此递归时会无限递归本身以及上级目录。原创 2024-06-19 13:05:09 · 384 阅读 · 0 评论 -
【操作系统】操作系统实验03-页面置换算法
在FIFO 算法的请求页式管理中,当发生缺页中断且主存没有空闲页面时,总是淘汰最先进入主存的页面,即选择在主存中驻留时间最久的页面被淘汰。假设进程访问页有m个,在内存中分配给该进程n个页面,开辟一个大小为m*n的数组空间,存储每次访问页的内存情况。遍历进程访问页序列,若当前页不在内存中且内存中有空闲页面(前n个进入的页),则记为缺页中断一次,并将内存中后(n-1)个页面前移一位,并将最新的页放入其中;若当前页不在内存中且内存中无空闲页面,则额外将移出的一位存至队列中;原创 2024-06-19 12:59:24 · 801 阅读 · 0 评论 -
【操作系统】操作系统实验02-生产者消费者程序改进
想要改进程序执行语句,使程序运行时能反映出具体是哪一位生产者/消费者 生产/消费 了哪一个商品。一开始我尝试在pthread_create()函数中给生产者/消费者函数传递生产者/消费者id变量,但是由于线程共享变量,无法在生产者-生产者、消费者-消费者之间作出区分。原创 2024-06-19 12:08:30 · 547 阅读 · 0 评论 -
【操作系统】操作系统实验01-消息的一发一收
实现方法:1.首先创建一个子进程。2.在子进程中,利用消息队列的通信机制,循环发送十个消息。在每次循环末尾利用软中断等待接收信号16,进而进入下一次循环。3.在父进程中,利用消息队列的通信机制,循环接收十个消息。每次接收完消息后,等待子进程进入等待接收信号16的状态后(sleep(1)),再给子进程发送16信号,通知子进程自己已接收完消息,使子进程进入下一轮循环,发送下一条消息。4.发送完全部10个消息后,父进程等待子进程结束,而后自身结束并退出。原创 2024-06-19 11:53:25 · 339 阅读 · 0 评论 -
【操作系统】操作系统课后作业-聊天程序
它是半双工的,具有固定的读端和写端。只能用于具有亲缘关系的进程之间的通信(也是父子进程或者兄弟进程之间)。不是普通的文件,不属于其他任何文件系统,并且只存在于内存中。FIFO可以在无关的进程之间交换数据。FIFO有路径名与之相关联,它以一种特殊设备文件形式存在于文件系统中。原创 2024-06-19 11:46:40 · 229 阅读 · 0 评论 -
【操作系统】操作系统课后作业-第三章项目一代码
【代码】【操作系统】操作系统课后作业-第三章项目一代码。原创 2024-06-19 11:41:03 · 106 阅读 · 0 评论 -
【xv6操作系统】xv6 启动过程分析
至此,操作系统就有了 init 进程(pid=1)和 shell 进程(pid=2)两个进程,操作系统也。risc-v 计算机上电时,它自身初始化,并运行一个引导加载器(存储在。_entry 调用 start(),start()调用 kernel。随后执行到 scheduler(),(gdb) s 进入函数。第一列为进程 pid,第二列为进程状态,第三列为进程名称。为了方便调试,我们把 CPU 设置为 1,而不是默认的。查看 init 进程 pid,子进程 pid,init。原创 2024-03-09 11:11:38 · 1428 阅读 · 0 评论 -
【xv6操作系统】Lec06 Isolation & system call entry/exit
这些指令就是的执行sd,将每个寄存器保存在trapframe的不同偏移位置。这里向trapframe中的a0赋值的原因是:所有的系统调用都有一个返回值,比如write会返回实际写入的字节数,而RISC-V上的C代码的习惯是函数的返回值存储于寄存器a0,所以为了模拟函数的返回,我们将返回值存储在trapframe的a0中。我们之前在系统调用的过程中是打开了中断的,这里关闭中断是因为我们将要更新STVEC寄存器来指向用户空间的trap处理代码,而之前在内核中的时候,我们指向的是内核空间的trap处理代码。原创 2024-03-09 10:50:47 · 846 阅读 · 0 评论 -
【xv6操作系统】Lab systems calls
该函数其实就是把在内核地址 src 开始的 len 大小的数据拷贝到用户进程 pagetable 的虚地址 dstva 处,所以 sys_sysinfo 函数实现里先用 argaddr 函数读进来我们要保存的在用户态的数据 sysinfo 的指针地址,然后再把从内核里得到的 sysinfo 开始的内容以 sizeof(info) 大小的的数据复制到这个指针上。当然,通过 proc 结构体的定义,我们知道使用进程状态时必须加锁,我们在 kernel/proc.c 中新增函数 nproc 如下,通过该函数以。原创 2024-03-08 23:38:00 · 1417 阅读 · 0 评论 -
【xv6操作系统】安装、运行与调试
启动之后,仿真器会弹出一个名为QEMU的qemu+xv6运行窗口,窗口显示进行一系列操作之后,给出shell提示符。我采用的是deepin-desktop-community-20.7-amd64虚拟机环境。来做一个虚拟的i386的机器,然后让它来运行我们的操作系统。执行make qemu-nox,运行qemu+xv6。起来(如保存到磁盘、flash或者网络服务器上)执行make qemu,运行qemu+xv6。”(在下载的xv6的原始代码上进行修改)解压、解包后,在源代码的目录树的根目录下。原创 2023-05-30 21:33:21 · 2316 阅读 · 0 评论