![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
操作系统
文章平均质量分 84
ethannotlazy
这个作者很懒,什么都没留下…
展开
-
ucore lab3
练习1:给未被映射的地址映射上物理页(需要编程)本实验要求完成do_pgfault函数,作用给未被映射的地址映射上物理页。具体而言,当启动分页机制以后,如果一条指令或数据的虚拟地址所对应的物理页框不在内存中或者访问的类型有错误(比如写一个只读页或用户态程序访问内核态的数据等),就会发生页错误异常。产生页面异常的原因主要有:1.目标页面不存在(页表项全为0,即该线性地址与物理地址尚未建立映射或者已经撤销);2.相应的物理页面不在内存中(页表项非空,但Present标志位=0,比如在swap分区或磁盘原创 2021-03-26 23:53:33 · 205 阅读 · 0 评论 -
ucore lab2
练习1:实现 first-fit 连续物理内存分配算法(需要编程)物理页面的结构体如下:/* * * struct Page - Page descriptor structures. Each Page describes one * physical page. In kern/mm/pmm.h, you can find lots of useful functions * that convert Page to other data types, such as phyical addr原创 2021-03-26 23:52:56 · 278 阅读 · 0 评论 -
ucore lab1
练习1:理解通过make生成执行文件的过程问题一:操作系统镜像文件ucore.img是如何一步一步生成的?(需要比较详细地解释Makefile中每一条相关命令和命令参数的含义,以及说明命令导致的结果)在Makefile中生成ucore.img的代码如下:# create ucore.imgUCOREIMG := $(call totarget,ucore.img)$(UCOREIMG): $(kernel) $(bootblock) $(V)dd if=/dev/zero of=$@ coun原创 2021-03-26 23:51:48 · 284 阅读 · 0 评论 -
ucore lab7
练习1 理解内核级信号量的实现和基于内核级信号量的哲学家就餐问题在理解信号量之前,先了解等待队列、定时器、关中断。等待队列到目前为止,用户进程或内核线程还没有睡眠的支持机制。在课程中提到用户进程或内核线程可以转入等待状态以等待某个特定事件(比如睡眠,等待子进程结束,等待信号量等),当该事件发生时这些进程能够被再次唤醒。内核实现这一功能的一个底层支撑机制就是等待队列wait_queue,等待队列和每一个事件(睡眠结束、时钟到达、任务完成、资源可用等)联系起来。需要等待事件的进程在转入休眠状态后插入到等待原创 2021-03-21 18:01:55 · 301 阅读 · 0 评论 -
ucore lab6
练习1: 使用 Round Robin 调度算法(不需要编码)调度框架首先看kern/schedule/sched.h下的sched_class封装了具体的调度算法,他是一个包含一系列函数指针的结构体:// The introduction of scheduling classes is borrrowed from Linux, and makes the // core scheduler quite extensible. These classes (the scheduler modul原创 2021-03-19 14:21:23 · 283 阅读 · 0 评论 -
ucore lab5
练习1: 加载应用程序并执行(需要编码)execve函数为了将一个新程序读进内存中执行,进程需要系统调用SYS_exec,该系统调用实际会调用do_execve:// do_execve - call exit_mmap(mm)&put_pgdir(mm) to reclaim memory space of current process// - call load_icode to setup new memory space accroding binary pro原创 2021-03-19 10:53:26 · 175 阅读 · 0 评论 -
ucore lab4
在ucore中进程控制块由proc_struct表示:struct proc_struct { enum proc_state state; // Process state int pid; // Process ID int runs; // the running times of Process原创 2021-03-17 17:03:25 · 144 阅读 · 0 评论 -
操作系统的进程与线程
进程创建进程有4种事件导致进程的创建:系统初始化进程创建系统调用用户请求创建一个新进程批处理作业的初始化新进程都是由一个已存在的进程执行了一个用于创建进程的系统调用而创建的。在UNIX中,只有一个系统调用可以创建新进程:fork。在调用fork之后,这两个进程拥有相同的存储映像、同样的环境字符串和相同的打开文件。通常,子进程接着执行execve或一个类似的系统调用,以修改其存储映...原创 2020-05-03 20:38:35 · 263 阅读 · 0 评论 -
操作系统的存储管理
存储器抽象:地址空间将物理地址暴露给进程将会导致几个严重的问题:用户程序寻址内存中的每个字节,他们可以容易地破坏操作系统。没有对物理内存抽象的情况下很难同时运行多个程序。(没有独立的地址空间)地址空间(address spaces)地址空间为程序创造了一种抽象的内存,地址空间是一个进程可用于寻址内存的一套地址集合,并且这个地址空间独立于其他进程的地址空间。交换技术把所有进程保存在...原创 2020-04-27 00:42:38 · 708 阅读 · 0 评论