ucore lab5
之前的实验均在内核态中执行,不涉及在用户态的操作,所以提供各种操作系统的内核线程只能在cpu核心态工作。然而应用程序员也需要在计算机系统上运行自己的应用软件,将应用软件都作为内核线程则无法保证系统的安全性。基于以上原因,ucore在lab5中提供用户态进程的创建和执行机制,给应用程序提供一个用户态的运行环境。
之前的实验均在内核态中执行,不涉及在用户态的操作,所以提供各种操作系统的内核线程只能在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采用了段页式机制,把其中段式内存的功能弱化,实现以分页为主的内存管理。
随着用户使用数据的增加,计算机系统本身的物理内存不足以满足用户的正常使用需求。早期的操作系统通过交换来解决内存不足的问题,现代操作系统则大多采用虚拟存储方式,在有限的内存中,只装入部分页面,在需要的页面或段不在内存中时再将相应的段或页调入内存。