![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
操作系统
文章平均质量分 94
芜湖韩金轮
hnu的小菜鸡
展开
-
《操作系统导论》第38章课后答案
作业本节引入 raid.py,这是一个简单的 RAID 模拟器,你可以使用它来增强你对 RAID 系统工作方式的了解。 详情请参阅 README 文件。使用模拟器执行一些基本的 RAID 映射测试。运行不同的级别(0、1、4、5),看看你是否可以找出一组请求的映射。 对于 RAID-5,看看你是否可以找出左对称(left- symmetric)和左不对称(left-asymmetric)布局之间的区别。 使用一些不同的随机种子,产生不同于上面的问题。运行指令:disk、offset均从0开始计数,查表不原创 2022-06-10 21:00:00 · 436 阅读 · 0 评论 -
《操作系统导论》第40章课后答案
使用工具 来研究文件系统状态如何随着各种操作的发生而改变。文件系统以空 状态开始,只有一个根目录。模拟发生时会执行各种操作,从而慢慢改变文件系统的磁 盘状态。详情请参阅 文件用一些不同的随机种子(比如 17、18、19、20)运行模拟器,看看你是否能确定每 次状态变化之间一定发生了哪些操作。首先弄清不同操作会使磁盘状态发生何种改变:然后根据磁盘状态的改变确定发生了何种操作。运行命令:操作1同时修改了inode位图和data位图,只有mkdir()可以做到。查看1号inode,发现新建了一个目录,其数原创 2022-06-10 21:00:00 · 628 阅读 · 0 评论 -
ucore lab2 物理内存管理 实验报告
实验一过后大家做出来了一个可以启动的系统,实验二主要涉及操作系统的物理内存管理。操作系统为了使用内存,还需高效地管理内存资源。在实验二中大家会了解并且自己动手完成一个简单的物理内存管理系统。、本次实验包含三个部分。首先了解如何发现系统中的物理内存;然后了解如何建立对物理内存的初步管理,即了解连续物理内存管理;最后了解页表相关的操作,即如何建立页表来实现虚拟内存到物理内存之间的映射,对段页式内存管理机制有一个比较全面的了解。本实验里面实现的内存管理还是非常基本的,并没有涉及到对实际机器的优化,比如针对 cac原创 2022-06-03 10:42:51 · 796 阅读 · 0 评论 -
ucore lab1 系统软件启动过程 实验报告
实验目的操作系统是一个软件,也需要通过某种机制加载并运行它。在这里我们将通过另外一个更加简单的软件-bootloader来完成这些工作。为此,我们需要完成一个能够切换到x86的保护模式并显示字符的bootloader,为启动操作系统ucore做准备。lab1提供了一个非常小的bootloader和ucore OS,整个bootloader执行代码小于512个字节,这样才能放到硬盘的主引导扇区中。通过分析和实现这个bootloader和ucore OS,读者可以了解到:计算机原理CPU的编址与寻址:原创 2022-05-31 18:07:26 · 1035 阅读 · 0 评论 -
ucore lab8 文件系统 实验报告
实验目的了解基本的文件系统系统调用的实现方法;了解一个基于索引节点组织方式的Simple FS文件系统的设计与实现;了解文件系统抽象层-VFS的设计与实现;实验内容实验七完成了在内核中的同步互斥实验。本次实验涉及的是文件系统,通过分析了解ucore文件系统的总体架构设计,完善读写文件操作,从新实现基于文件系统的执行程序机制(即改写do_execve),从而可以完成执行存储在磁盘上的文件和实现文件读写等功能。练习练习0:填写已有实验本实验依赖实验1/2/3/4/5/6/7。请把你做的实验1原创 2022-05-31 11:12:20 · 758 阅读 · 0 评论 -
ucore lab7 同步互斥 实验报告
实验目的理解操作系统的同步互斥的设计实现;理解底层支撑技术:禁用中断、定时器、等待队列;在ucore中理解信号量(semaphore)机制的具体实现;理解管程机制,在ucore内核中增加基于管程(monitor)的条件变量(condition variable)的支持;了解经典进程同步问题,并能使用同步机制解决进程同步问题。实验内容实验六完成了用户进程的调度框架和具体的调度算法,可调度运行多个进程。如果多个进程需要协同操作或访问共享资源,则存在如何同步和有序竞争的问题。本次实验,主要是熟悉原创 2022-05-30 11:03:53 · 650 阅读 · 0 评论 -
ucore lab6 调度器 实验报告
实验目的理解操作系统的调度管理机制熟悉 ucore 的系统调度器框架,以及缺省的Round-Robin 调度算法基于调度器框架实现一个(Stride Scheduling)调度算法来替换缺省的调度算法实验内容实验五完成了用户进程的管理,可在用户态运行多个进程。但到目前为止,采用的调度策略是很简单的FIFO调度策略。本次实验,主要是熟悉ucore的系统调度器框架,以及基于此框架的Round-Robin(RR) 调度算法。然后参考RR调度算法的实现,完成Stride Scheduling调度算法。原创 2022-05-26 21:11:58 · 671 阅读 · 1 评论 -
《操作系统导论》第37章课后答案
早点写完,免得夜长梦多本作业使用 disk.py 来帮助读者熟悉现代磁盘的工作原理。 它有很多不同的选项,与大多数其他模拟不同,它有图形动画, 可以准确显示磁盘运行时发生的情况。详情请参阅 README 文件。37.1问题描述计算以下几组请求的寻道、旋转和传输时间: -a 0,-a 6,-a 30,-a 7,30,8, 最后计算 -a 10,11,12,13解答-a 0首先运行命令python2 disk.py -a 0 -G如果出现以下提示,首先执行命令 sudo apt-get inst原创 2022-05-26 20:34:26 · 919 阅读 · 0 评论 -
《操作系统导论》 知识总结 第20章 分页:较小的表
通过引入TLB优化了分页时,由于需要查询页表而进行的额外的内存访问,现在解决分页的第二个问题,即页表太大,消耗了太多内存假设一个32位地址空间,一页为4kb,每个页表项为4kb,一个32位地址空间大约被分为一百万个虚拟页,那么该进程页表大约为4MB,现代计算机可能同时有100个活动进程,那么光是页表,就需要占用内存数百兆,因此需要一些技术来减轻这种沉重的负担简单的解决方案:更大的页可以用一种简单的方法减小页表大小:使用更大的页。再以32位地址空间为例,这次每页设置为16kb,每个页表项4kb,现在该原创 2022-05-25 19:30:10 · 633 阅读 · 0 评论 -
《操作系统导论》知识总结 第19章 分页:快速地址转换TLB
操作系统小班正好做到这部分,可以顺便直接写了。使用分页作为核心机制来完成虚拟内存,可能会带来较高的性能开销。因为将地址空间划分为固定大小的页,要记录各单元地址映射信息。所以地址转换时,需要额外的内存访问来获得映射信息,而每次指令获取,显示加载或保存都需要额外读取一次内存以得到转换信息。地址转换旁路缓冲存储器(TLB),也称地址转换缓存,即频繁发生的虚拟地址到物理地址转换的硬件缓存,对每次内存访问,硬件先检查TLB,看看其中是否有期望的转换映射,如果有,就完成转换,由于是硬件完成的,所以速度很快,不需要再原创 2022-05-24 21:12:39 · 1833 阅读 · 2 评论 -
ucore lab5用户进程管理 实验报告
实验目的了解第一个用户进程创建过程了解系统调用框架的实现机制了解ucore如何实现系统调用sys_fork/sys_exec/sys_exit/sys_wait来进行进程管理实验内容实验4完成了内核线程,但到目前为止,所有的运行都在内核态执行。实验5将创建用户进程,让用户进程在用户态执行,且在需要ucore支持时,可通过系统调用来让ucore提供服务。为此需要构造出第一个用户进程,并通过系统调用sys_fork/sys_exec/sys_exit/sys_wait来支持运行不同的应用程序,完成原创 2022-05-23 21:14:05 · 849 阅读 · 0 评论 -
《操作系统导论》知识总结 第18章 分页:介绍
分页思想:将空间分割成固定长度的分片。分页不是将一个进程的地址空间分割成几个不同长度的逻辑段(即代码、堆、段),而是分割成固定大小的单元,每个单元称为一页。相应地,我们把物理内存看成是定长槽块的阵列,叫作页帧(page frame)。每个这样的页帧包含一个虚拟内存页。一个简单例子左图地址空间64字节,被分成4个16字节的页右图物理内存128字节,有8个页帧,虚拟地址空间的页被存放到了物理内存的不同页帧为了记录地址空间的每个虚拟页放在物理内存中的位置,操作系统通常为每个进程保存一个数据结构,称原创 2022-05-22 20:34:51 · 547 阅读 · 0 评论 -
《操作系统导论》第31章课后答案
31.1问题描述:第一个问题就是实现和测试 fork/join 问题的解决方案,如本文所述。 即使在文本中描述了此解决方案, 重新自己实现一遍也是值得的。 even Bach would rewrite Vivaldi, allowing one soon-to-be master to learn from an existing one。 有关详细信息,请参见 fork-join.c。 将添加 sleep(1) 到 child 函数内以确保其正常工作。解答:题目要求我们补全fork-join.c原创 2022-05-22 12:52:11 · 773 阅读 · 2 评论 -
《操作系统导论》知识总结 第17章 空闲空间管理
本章主要讨论关于内存空闲空间管理的一些问题。如果需要管理的内存空间被划分为固定大小的单元,空闲空间管理就很容易。在这种情况下,只需要维护这些大小固定的单元的列表,如果有内存分配请求,就返回列表中的第一项。但是,如果空闲空间由大小不同的单元构成,管理就变得比较困难。这种情况出现在用户级的内存分配库(如malloc()和free()),或者操作系统用分段的方式实现虚拟内存。在这两种情况下,出现了外部碎片的问题,即空闲空间被分割成不同大小的碎片,后续的请求可能失败,因为没有一块足够大的连续空闲空间,即使这时总的空原创 2022-05-19 19:48:51 · 605 阅读 · 0 评论 -
《操作系统导论》第30章课后答案
30.1问题描述:我们的第一个问题集中在 main-two-cvs-while.c(有效的解决方案)上。 首先,研究代码。 你认为你了解当你运行程序时会发生什么吗?解答:我们首先查看main-two-cvs-while.c的主要函数:void do_fill(int value) { // ensure empty before usage ensure(buffer[fill_ptr] == EMPTY, "error: tried to fill a non-empty buf原创 2022-05-19 10:52:54 · 517 阅读 · 0 评论 -
《操作系统导论》 知识总结 第16章 分段
利用基址和界限寄存器将不同进程重定位到不同的物理内存区域存在一个问题:栈和堆之间,有一大块“空闲”空间。原创 2022-05-18 19:28:51 · 1005 阅读 · 0 评论 -
《操作系统导论》第28章课后答案
28.1问题描述:首先用标志 flag.s运行 x86.py。该代码通过一个内存标志“实现”锁。你能理解汇编代码试图做什么吗?解答:首先运行命令./x86.py -p flag.s运行程序可以看到两个线程在执行接着输入命令cat flag.s查看汇编代码:bo@ubuntu:~/ostep-homework/threads-locks$ cat flag.s.var flag.var count.main.top.acquiremov flag, %ax #te原创 2022-05-17 10:38:36 · 1201 阅读 · 0 评论 -
ucore lab4 内核线程管理
实验目的了解内核线程创建/执行的管理过程了解内核线程的切换和基本调度过程实验内容实验2/3完成了物理和虚拟内存管理,这给创建内核线程(内核线程是一种特殊的进程)打下了提供内存管理的基础。当一个程序加载到内存中运行时,首先通过ucore OS的内存管理子系统分配合适的空间,然后就需要考虑如何分时使用CPU来“并发”执行多个程序,让每个运行的程序(这里用线程或进程表示)“感到”它们各自拥有“自己”的CPU。本次实验将首先接触的是内核线程的管理。内核线程是一种特殊的进程,内核线程与用户进程的区别有两原创 2022-05-16 20:47:37 · 422 阅读 · 0 评论 -
《操作系统导论》第26章课后答案
26. 1.问题描述:开始,我们来看一个简单的程序,“loop.s”。首先,阅读这个程序,看看你是否能理解它: cat loop.s。然后,用这些参数运行它:./x86.py -p loop.s -t 1 -i 100 -R dx这指定了一个单线程,每 100 条指令产生一个中断,并且追踪寄存器 %d。你能弄清楚 %dx 在运行过程中的值吗? 你有答案之后,运行上面的代码并使用 -c 标志来检查你的答案。注意答案的左边显示了右侧指令运行后寄存器的值(或内存的值)解答:使用cat命令查看loop原创 2022-05-16 09:52:40 · 380 阅读 · 0 评论 -
《操作系统导论》 知识总结 第15章 机制:地址转换
实现 CPU 虚拟化时,我们遵循的一般准则被称为受限直接访问(Limited Direct Execution,LDE)。即让程序运行的大部分指令直接访问硬件,只在一些关键点(如进程发起系统调用或发生时钟中断)由操作系统介入来确保“在正确时间,正确的地点,做正确的事”。高效和控制是现代操作系统的两个主要目标。为了高效地实现内存虚拟化,并提供应用程序所需的灵活性,我们利用基于硬件的地址转换技术。通过该技术,硬件对每次内存访问进行处理(即指令获取、数据读取或写入),将指令中的虚拟地址转换为数据实际存储的物理原创 2022-05-15 19:46:24 · 1624 阅读 · 0 评论 -
《操作系统导论》 知识总结 第14章 插叙:内存操作API
本章主要关注的问题是:关键问题:如何分配和管理内存在 UNIX/C 程序中,理解如何分配和管理内存是构建健壮和可靠软件的重要基础。通常使用哪些接口?哪些错误需要避免?内存类型在运行一个C程序的时候,会分配两种类型的内存。第一种称为栈内存,它的申请和释放操作是编译器来隐式管理的,所以有时也称为自动内存**。假设需要在func()函数中为一个整形变量x申请空间,我们只需要这样:void func() { int x; // declares an integer on the stack原创 2022-05-14 19:19:41 · 460 阅读 · 0 评论 -
《操作系统导论》 知识总结 第13章 抽象:地址空间
老师没有讲第10章,默认考试不会考(我也不知道第10章考不考)😥😥😥早期系统操作系统早期是一组函数,在内存中(在本例中,从物理地址0开始),然后有一个正在运行的程序(进程),目前在物理内存中(在本例中,从物理地址64KB开始),并使用剩余的内存。多道程序和时分共享多道程序系统时代开启,多个进程在给定时间准备运行,比如当有一个进程在等待 I/O 操作的时候,操作系统会切换这些进程,这样增加了 CPU 的有效利用率(utilization)。那时候,效率(efficiency)的提高尤其重要。进入分原创 2022-05-13 21:02:22 · 233 阅读 · 0 评论 -
《操作系统导论》 知识总结 第九章 调度:比例份额
**比例份额**(proportional-share)调度程序,有时也称为**公平份额**(fair-share)调度程序。其认为调度程序的最终目标是确保每个工作获得一定比例的CPU时间,而不是优化周转时间和响应时间。彩票调度基本思想:每隔一段时间,都会举行一次彩票抽奖,以确定接下来应该运行哪个进程。越是应该频繁运行的进程,越是应该拥有更多地赢得彩票的机会。原创 2022-05-13 20:00:29 · 490 阅读 · 0 评论 -
《操作系统导论》 知识总结 第八章 调度:多级反馈队列
**多级反馈队列**(Multi-level Feedback Queue,**MLFQ**)需要解决两方面的问题。 - 首先它要**优化周转时间**,这可以通过优先执行较短的工作来实现。然而,操作系统常常不知道工作要运行多久,而这又是SJF等算法所必需的。 - 其次,MLFQ希望**给用户提供较好的交互体验**,因此需要**降低响应时间**。然而,轮转调度虽然降低了响应时间,周转时间却很差。所以这里的问题是:通常我们对进程一无所知,应该如何构建调度程序来实现这些目标?调度程序如何在运行过程中学习原创 2022-05-13 19:10:25 · 2283 阅读 · 0 评论 -
《操作系统导论》知识总结 第七章 进程调度:介绍
工作负载假设为了方便概念的描述,对操作系统中运行的进程(有时也叫工作任务)做出如下的假设: 1. 每一工作运行相同的时间 2. 所有的工作同时到达。 3. 一旦开始,每个工作保持运行直到完成。 4. 所有的工作只是用 CPU(即它们不执行 IO 操作)。 5. 每个工作的运行时间是已知的。原创 2022-05-12 21:11:01 · 938 阅读 · 2 评论 -
《操作系统导论》知识总结 第六章 机制:受限直接执行
在四章中已经知道,要实现 CPU 的虚拟化,操作系统就需要一些低级机制以及一些高级智能。我们将低级机制称为机制(mechanism)。机制是一些低级方法或协议,实现了所需的功能。这一章我们介绍一种机制:受限直接执行构建虚拟化时存在一些挑战:性能:如何在不增加系统开销的情况下实现虚拟化?控制权:如何有效地运行进程,同时保留对 CPU 的控制?控制权对于操作系统尤为重要,因为操作系统负责资源管理。如果没有控制权,一个进程可以简单地无限制运行并接管机器,或访问没有权限的信息直接运行协议这个概念原创 2022-05-12 19:31:07 · 737 阅读 · 0 评论 -
《操作系统导论》知识总结 第五章 插叙:进程API
本章将讨论 UNIX 系统中的进程创建。UNIX 系统采用了一种非常有趣的创建新进程的方式,即通过一对系统调用:fork()和 exec()。进程还可以通过第三个系统调用 wait(),来等待其创建的子进程执行完成。本章将详细介绍这些接口。原创 2022-05-11 19:05:28 · 364 阅读 · 0 评论 -
《操作系统导论》知识总结 第四章 抽象:进程
进程的非正式定义非常简单:进程就是运行中的程序。关键问题:如何提供有许多 CPU 的假象?操作系统通过虚拟化(virtualizing)CPU 来提供这种假象。通过让一个进程只运行一个时间片,然后切换到其他进程,操作系统提供了存在多个虚拟 CPU 的假象。这就是时分共享(time sharing)CPU 技术,允许用户如愿运行多个并发进程。潜在的开销就是性能损失,因为如果 CPU 必须共享,每个进程的运行就会慢一点。抽象:进程操作系统为正在运行的程序提供的抽象,就是所谓的进程(process)。原创 2022-05-11 12:42:34 · 808 阅读 · 0 评论 -
ucore lab3 虚拟内存管理
做完实验二后,大家可以了解并掌握物理内存管理中的连续空间分配算法的具体实现以及如何建立二级页表。本次实验是在实验二的基础上,借助于页表机制和实验一中涉及的中断异常处理机制,完成Page Fault异常处理和FIFO页替换算法的实现。实验原理最大的区别是在设计了如何在磁盘上缓存内存页,从而能够支持虚存管理,提供一个比实际物理内存空间“更大”的虚拟内存空间给系统使用。实验目的了解虚拟内存的Page Fault异常处理实现了解页替换算法在操作系统中的实现实验内容本次实验是在实验二的基础上,借助于页表原创 2022-05-09 21:06:57 · 416 阅读 · 0 评论 -
《操作系统导论》知识总结 第二章 操作系统介绍
程序运行时会发生什么?一个正在运行的程序会做一件非常简单的事情:执行指令。处理器从内存中获取(fetch)一条指令,对其进行解码(decode)(弄清楚这是哪条指令),然后执行(execute)它(做它应该做的事情,如两个数相加、访问内存、检查条件、跳转到函数等)。完成这条指令后,处理器继续执行下一条指令,依此类推,直到程序最终完成。这就是冯·诺依曼(Von Neumann)计算模型的基本概念。有一类软件负责让程序运行变得容易(甚至允许你同时运行多个程序),允许程序共享内存,让程序能够与设备交互,以原创 2022-05-08 16:06:44 · 765 阅读 · 0 评论