0%

之前的实验均在内核态中执行,不涉及在用户态的操作,所以提供各种操作系统的内核线程只能在cpu核心态工作。然而应用程序员也需要在计算机系统上运行自己的应用软件,将应用软件都作为内核线程则无法保证系统的安全性。基于以上原因,ucore在lab5中提供用户态进程的创建和执行机制,给应用程序提供一个用户态的运行环境。

阅读全文 »

多任务即并行执行多个进程,控制流并发执行。之前的实验中,整个控制流仍为串行执行。ucore lab4在之前实验的基础上进行cpu的虚拟化,即让ucore实现分时共享cpu,实现多条指令流的并发执行。lab4首先涉及的是内核线程管理,指令执行流的单位称为线程,对线程管理就是线程调度和分派。进程作为操作系统分配资源的单位对线程提供支持。

阅读全文 »

进程生命周期存在多个状态,多个状态间可以相互转换。在unix系统中提供了一系列与进程状态相关的系统调用,比如fork用于创建新进程,exit用于退出进程,wait用于父进程等待子进程结束。

阅读全文 »

现代操作系统(比如Mac OS X,UNIX,Linux,Windows等)均为多用户操作系统。什么是多用户呢?概括一下,就是操作系统可以运行多个任务,我们可以一边用Chrome浏览器浏览网页,一边用网易云音乐听歌,这就是多任务。我们也可以在windows下任务管理器中看到多个正在执行的任务。对于操作系统来说,一个任务就是一个进程,进程内的子任务即为线程。

阅读全文 »

ucore lab2通过段页式机制将虚拟内存映射到物理内存,并具体实现了物理内存管理空间中的连续内存分配算法。ucore lab3将实现非连续内存分配中的虚拟内存,借助之前的页表机制和中断异常机制,通过缺页异常的处理来衔接虚拟内存和物理内存之间的差异。与前者差异主要区别在于如何在磁盘交换区缓存页,从而提供比实际物理内存更大的虚拟内存空间。

阅读全文 »

虚拟内存只把部分程序放到内存中,虚拟内存单元不一定由实际物理内存单元对应,因此访问的部分可能不在内存中。在内存中无空闲页时,访问的页面必须替换已经存在的某一页面才能放入到内存中。如何选择替换页由页面置换算法实现,其中根据是否区分不同进程的页面,分为局部置换算法和全局置换算法。

阅读全文 »

ucore lab1初步实现了一个可以读磁盘并且加载ELF执行文件格式的系统,也可以响应和显示字符。仅仅如此并不足以满足操作系统的要求,进程在执行过程中需要系统分配内存等资源。为了高效地管理内存,ucore lab2采用了段页式机制,把其中段式内存的功能弱化,实现以分页为主的内存管理。

阅读全文 »

随着用户使用数据的增加,计算机系统本身的物理内存不足以满足用户的正常使用需求。早期的操作系统通过交换来解决内存不足的问题,现代操作系统则大多采用虚拟存储方式,在有限的内存中,只装入部分页面,在需要的页面或段不在内存中时再将相应的段或页调入内存。

阅读全文 »

连续内存分配内存利用效率比较低,无法适应动态修改。非连续内存分配通过允许分配非连续物理内存空间来解决问题,其中根据分块标准的不同,分为以段为单位的段式存储管理和以页为单位的页式存储管理。段式内存便于内存保护,而页式内存便于内存转移,将二者折衷又引入了段页式存储管理。

阅读全文 »

计算机会经常有访问内存的操作,内存最小访问单位是字节,每个字节都有自己的物理地址,MMU将程序的逻辑地址转化为物理地址后访问对应的字节。为了处理在分配过程中分配大小和实际使用大小的差异,引入了内存分配算法。内存分配分为连续内存分配和不连续内存分配两种方式,这取决于分配的物理内存空间是否连续。

阅读全文 »