《第1章-GeekOS教学操作系统概论-计算机操作系统实践教程-CAI-教学课件.ppt》由会员分享,可在线阅读,更多相关《第1章-GeekOS教学操作系统概论-计算机操作系统实践教程-CAI-教学课件.ppt(22页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、n n教学操作系统 教学操作系统有两大类,一类是针对RISC结构MIPS处理器的,另外一类是针对CISC结构的the Intel IA-32(or x86)通用处理器的。这样分类是因为:处理器是操作系统运行的硬件环境中最重要的部分。第1章 GeekOS教学操作系统概论 一、针对RISC结构MIPS处理器的教学操作系统n nNachosNachos(Not Another Completely Heuristic Not Another Completely Heuristic Operating SystemOperating System)。是建立在软件模拟的虚拟机)。是建立在软件模拟的虚拟
2、机)。是建立在软件模拟的虚拟机)。是建立在软件模拟的虚拟机之上的教学操作系统,采用之上的教学操作系统,采用之上的教学操作系统,采用之上的教学操作系统,采用MIPS R2/3000MIPS R2/3000的指令集,的指令集,的指令集,的指令集,能模拟主存、中断、网络以及磁盘系统等所必须的硬能模拟主存、中断、网络以及磁盘系统等所必须的硬能模拟主存、中断、网络以及磁盘系统等所必须的硬能模拟主存、中断、网络以及磁盘系统等所必须的硬件系统,美国加州大学伯克利分校多次采用该操作系件系统,美国加州大学伯克利分校多次采用该操作系件系统,美国加州大学伯克利分校多次采用该操作系件系统,美国加州大学伯克利分校多次采
3、用该操作系统作为课程设计平台。统作为课程设计平台。统作为课程设计平台。统作为课程设计平台。n nOS/161OS/161是运行在与操作系统无关的是运行在与操作系统无关的是运行在与操作系统无关的是运行在与操作系统无关的system/161system/161模模模模拟器上的,操作系统代码是拟器上的,操作系统代码是拟器上的,操作系统代码是拟器上的,操作系统代码是MIPSMIPS对应的机器代码。对应的机器代码。对应的机器代码。对应的机器代码。n n无论是无论是NachosNachos还是还是OS/161OS/161,若学生使用,若学生使用WindowsWindows或或Linux Linux 开发环
4、境的话,都需要使用交叉编译器才能把开发环境的话,都需要使用交叉编译器才能把代码编译成代码编译成MIPSMIPS相应的机器代码。相应的机器代码。二、针对针对CISC结构的Intel IA-32(or x86)通用处理器的教学操作系统n nMINIX:是:是Andrew S.Tanenbaum(AST)于)于1987年开发的,年开发的,目前主要有目前主要有1.5 版和版和2.0 版两个版本在使用。版两个版本在使用。MINIX 系统是免费的,可以从许多系统是免费的,可以从许多FTP 上上下载,下载,MINIX是一个包括了虚拟内存管理、是一个包括了虚拟内存管理、文件系统、设备驱动程序、网络和用户态程文
5、件系统、设备驱动程序、网络和用户态程序等的比较完整的操作系统,由两万多行代序等的比较完整的操作系统,由两万多行代码组成。码组成。n n对于教学有点过于庞大和复杂,而且由于它对于教学有点过于庞大和复杂,而且由于它已经实现了操作系统的全部基本功能,没有已经实现了操作系统的全部基本功能,没有留下合适的练习让学生自己完成留下合适的练习让学生自己完成 n nGeekOSGeekOS:是一个基于:是一个基于:是一个基于:是一个基于X86X86架构的架构的架构的架构的PCPC机上运行的机上运行的机上运行的机上运行的微操作系统内核,由美国马理兰大学的教师开发,微操作系统内核,由美国马理兰大学的教师开发,微操作
6、系统内核,由美国马理兰大学的教师开发,微操作系统内核,由美国马理兰大学的教师开发,是一个用是一个用是一个用是一个用C C语言开发的操作系统,语言开发的操作系统,语言开发的操作系统,语言开发的操作系统,GeekOSGeekOS主要用主要用主要用主要用于操作系统课程设计,目的是使学生能够实际动手于操作系统课程设计,目的是使学生能够实际动手于操作系统课程设计,目的是使学生能够实际动手于操作系统课程设计,目的是使学生能够实际动手参与到一个操作系统的开发工作中。参与到一个操作系统的开发工作中。参与到一个操作系统的开发工作中。参与到一个操作系统的开发工作中。学生可以在学生可以在学生可以在学生可以在Linu
7、xLinux或或或或UnixUnix环境下对其进行功能扩充,也可以环境下对其进行功能扩充,也可以环境下对其进行功能扩充,也可以环境下对其进行功能扩充,也可以在在在在windowswindows下使用下使用下使用下使用CygwinCygwin工具进行开发,且其工具进行开发,且其工具进行开发,且其工具进行开发,且其针对进程、文件系统、存储管理等操作系统核心内针对进程、文件系统、存储管理等操作系统核心内针对进程、文件系统、存储管理等操作系统核心内针对进程、文件系统、存储管理等操作系统核心内容分别设计了容分别设计了容分别设计了容分别设计了7 7个难度逐渐增加的项目供教师选择个难度逐渐增加的项目供教师选
8、择个难度逐渐增加的项目供教师选择个难度逐渐增加的项目供教师选择 。n n出于教学目的,这个系统内核设计简单,却又兼备出于教学目的,这个系统内核设计简单,却又兼备出于教学目的,这个系统内核设计简单,却又兼备出于教学目的,这个系统内核设计简单,却又兼备实用性,它可以运行在真正的实用性,它可以运行在真正的实用性,它可以运行在真正的实用性,它可以运行在真正的X86 PCX86 PC硬件平台。硬件平台。硬件平台。硬件平台。1、GeekOS的存储器管理 n n分页分配方式分页分配方式分页分配方式分页分配方式 :系统中所有存储器都分成大小相等的块,称作页。在系统中所有存储器都分成大小相等的块,称作页。在系统
9、中所有存储器都分成大小相等的块,称作页。在系统中所有存储器都分成大小相等的块,称作页。在X86X86系统中,页的大小是系统中,页的大小是系统中,页的大小是系统中,页的大小是4KB4KB。在在在在GeekOSGeekOS中每一页都是一个中每一页都是一个中每一页都是一个中每一页都是一个PagePage结构:结构:结构:结构:struct Page struct Page unsigned flags;unsigned flags;/*/*页状态页状态页状态页状态*/*/DEFINE_LINK(Page_List,Page);/*Page_List DEFINE_LINK(Page_List,Pag
10、e);/*Page_List页链表指针页链表指针页链表指针页链表指针*/*/int clock;int clock;ulong_t vaddr;ulong_t vaddr;/*/*页映射到的用户空间虚拟地址页映射到的用户空间虚拟地址页映射到的用户空间虚拟地址页映射到的用户空间虚拟地址 */*/pte_t*entry;pte_t*entry;/*/*指向页表中本页的页表项指向页表中本页的页表项指向页表中本页的页表项指向页表中本页的页表项*/*/;GeekOS的存储器管理 n n堆分配方式堆分配方式:堆分配提供不同大小存储块的分配,使用函数Malloc()和Free()进行存储块的分配和回收 系统
11、初始化内存布局系统初始化内存布局 GeekOS支持的设备支持的设备 n n键盘键盘键盘键盘 n nWait_For_Key()Wait_For_Key()函数:函数首先检查键盘缓冲区是否函数:函数首先检查键盘缓冲区是否有按键,如果有,就读取一个键码,如果此时键盘缓有按键,如果有,就读取一个键码,如果此时键盘缓冲区中没有按键,就将进程放入键盘事件等待队列冲区中没有按键,就将进程放入键盘事件等待队列s_waitQueues_waitQueue,由于用户的按键操作触发了键盘中断,由于用户的按键操作触发了键盘中断,键盘中断处理函数键盘中断处理函数Keyboard_Interrupt_HandlerKe
12、yboard_Interrupt_Handler就会就会读取用户按键,将低级键扫描码转换为含读取用户按键,将低级键扫描码转换为含ASCIIASCII字符字符的高级代码,并刷新键盘缓冲区,最后唤醒等待按键的高级代码,并刷新键盘缓冲区,最后唤醒等待按键的进程继续运行。若用户按下的进程继续运行。若用户按下shiftshift、controlcontrol、altalt等键等键时,也能同样处理。时,也能同样处理。n n键盘处理程序的代码在头文件键盘处理程序的代码在头文件中中 GeekOS支持的设备支持的设备 n n系统时钟系统时钟n nGeekOS中用户一般不直接使用任何时钟服务,系统时钟主要用于时钟
13、中断,一般用于保证所有的线程都有机会占用CPU,即线程运行一段时间后会发生时钟中断,调度程序就选择另外的线程运行。4、GeekOS的中断和线程的中断和线程 n nExceptionException(异常):当前运行的线程执行了非法操作,则发(异常):当前运行的线程执行了非法操作,则发(异常):当前运行的线程执行了非法操作,则发(异常):当前运行的线程执行了非法操作,则发生异常。这类中断的例子有:执行非法指令、被生异常。这类中断的例子有:执行非法指令、被生异常。这类中断的例子有:执行非法指令、被生异常。这类中断的例子有:执行非法指令、被0 0整除等。因整除等。因整除等。因整除等。因为这种异常无
14、法恢复,所以通常都只能采取撤销父线程的方式为这种异常无法恢复,所以通常都只能采取撤销父线程的方式为这种异常无法恢复,所以通常都只能采取撤销父线程的方式为这种异常无法恢复,所以通常都只能采取撤销父线程的方式处理。处理。处理。处理。n n Faults Faults(故障):故障和异常一样属于同步中断。故障通常(故障):故障和异常一样属于同步中断。故障通常(故障):故障和异常一样属于同步中断。故障通常(故障):故障和异常一样属于同步中断。故障通常是可恢复的,内核通过执行一系列操作,去除引起故障的条件,是可恢复的,内核通过执行一系列操作,去除引起故障的条件,是可恢复的,内核通过执行一系列操作,去除引
15、起故障的条件,是可恢复的,内核通过执行一系列操作,去除引起故障的条件,然后使发生故障的线程继续执行即可。缺页中断就是故障的一然后使发生故障的线程继续执行即可。缺页中断就是故障的一然后使发生故障的线程继续执行即可。缺页中断就是故障的一然后使发生故障的线程继续执行即可。缺页中断就是故障的一种。种。种。种。n n Hardware interrupts Hardware interrupts(硬件中断):外设用硬件中断将(硬件中断):外设用硬件中断将(硬件中断):外设用硬件中断将(硬件中断):外设用硬件中断将某些事件通知某些事件通知某些事件通知某些事件通知CPUCPU。硬件中断是不可预知的,所以是异
16、步中断。硬件中断是不可预知的,所以是异步中断。硬件中断是不可预知的,所以是异步中断。硬件中断是不可预知的,所以是异步中断。有时系统可能无法立即处理异步中断,在这种情况下,系统会有时系统可能无法立即处理异步中断,在这种情况下,系统会有时系统可能无法立即处理异步中断,在这种情况下,系统会有时系统可能无法立即处理异步中断,在这种情况下,系统会暂时屏蔽中断直到系统能处理中断时再开中断。时钟中断就是暂时屏蔽中断直到系统能处理中断时再开中断。时钟中断就是暂时屏蔽中断直到系统能处理中断时再开中断。时钟中断就是暂时屏蔽中断直到系统能处理中断时再开中断。时钟中断就是一种硬件中断。一种硬件中断。一种硬件中断。一种
17、硬件中断。n n Software interrupt Software interrupt(软件中断):用户态进程用于发出(软件中断):用户态进程用于发出(软件中断):用户态进程用于发出(软件中断):用户态进程用于发出信号表示它需要系统内核的干涉。信号表示它需要系统内核的干涉。信号表示它需要系统内核的干涉。信号表示它需要系统内核的干涉。GeekOSGeekOS中仅使用一种软件中仅使用一种软件中仅使用一种软件中仅使用一种软件中断中断中断中断系统调用。线程用系统调用向内核发出服务请求,如系统调用。线程用系统调用向内核发出服务请求,如系统调用。线程用系统调用向内核发出服务请求,如系统调用。线程用系
18、统调用向内核发出服务请求,如线程要打开文件、执行输入、输出操作、创建新线程等线程要打开文件、执行输入、输出操作、创建新线程等线程要打开文件、执行输入、输出操作、创建新线程等线程要打开文件、执行输入、输出操作、创建新线程等 GeekOS的线程的线程 n nGeekOSGeekOS中每个线程都是一个中每个线程都是一个中每个线程都是一个中每个线程都是一个Kenerl_ThreadKenerl_Thread对象对象对象对象 n nGeekOSGeekOS中中中中的的的的进进进进程程程程是是是是能能能能运运运运行行行行于于于于用用用用户户户户态态态态的的的的普普普普通通通通线线线线程程程程,所所所所以也
19、称作用户线程以也称作用户线程以也称作用户线程以也称作用户线程 n n系系系系统统统统中中中中一一一一些些些些线线线线程程程程完完完完全全全全运运运运行行行行于于于于核核核核态态态态,这这这这类类类类线线线线程程程程称称称称为为为为系系系系统统统统线程线程线程线程 5、GeekOS系统引导系统引导 n nGeekOSGeekOS内核编译后,在内核编译后,在内核编译后,在内核编译后,在buildbuild目录下会生成一个软盘镜像文目录下会生成一个软盘镜像文目录下会生成一个软盘镜像文目录下会生成一个软盘镜像文件件件件fd.imgfd.img。n nBochsBochs开始运行系统后,会自动检测启动设
20、备。因为软盘首扇开始运行系统后,会自动检测启动设备。因为软盘首扇开始运行系统后,会自动检测启动设备。因为软盘首扇开始运行系统后,会自动检测启动设备。因为软盘首扇区最后一个字在编译时是写入区最后一个字在编译时是写入区最后一个字在编译时是写入区最后一个字在编译时是写入55AA55AA数据,而数据,而数据,而数据,而BochsBochs被配置为被配置为被配置为被配置为从软盘启动,这样从软盘启动,这样从软盘启动,这样从软盘启动,这样BochsBochs得以成功地检测到得以成功地检测到得以成功地检测到得以成功地检测到GeekOSGeekOS的启动软的启动软的启动软的启动软盘。盘。盘。盘。n nBochs
21、Bochs就会像一台真正的计算机一样,首先导入软盘的首扇区就会像一台真正的计算机一样,首先导入软盘的首扇区就会像一台真正的计算机一样,首先导入软盘的首扇区就会像一台真正的计算机一样,首先导入软盘的首扇区数据到从内存地址数据到从内存地址数据到从内存地址数据到从内存地址0 x7c000 x7c00开始的一块内存区,之后跳转到这开始的一块内存区,之后跳转到这开始的一块内存区,之后跳转到这开始的一块内存区,之后跳转到这个地址,开始执行这段首扇区内的程序代码。首扇区内的代码个地址,开始执行这段首扇区内的程序代码。首扇区内的代码个地址,开始执行这段首扇区内的程序代码。首扇区内的代码个地址,开始执行这段首扇
22、区内的程序代码。首扇区内的代码是由位于是由位于是由位于是由位于/src/geekos/src/geekos目录中的目录中的目录中的目录中的fd_boot.asmfd_boot.asm编译生成的引导编译生成的引导编译生成的引导编译生成的引导程序。这段汇编程序完成搜索并装载软盘中的程序。这段汇编程序完成搜索并装载软盘中的程序。这段汇编程序完成搜索并装载软盘中的程序。这段汇编程序完成搜索并装载软盘中的GeekOSGeekOS内核二内核二内核二内核二进制文件的功能。在装载完毕后,装载程序执行段间跳转,转进制文件的功能。在装载完毕后,装载程序执行段间跳转,转进制文件的功能。在装载完毕后,装载程序执行段间
23、跳转,转进制文件的功能。在装载完毕后,装载程序执行段间跳转,转入程序入程序入程序入程序Setup(/src/geekosSetup(/src/geekos目录中的目录中的目录中的目录中的setup.asmsetup.asm编译生成编译生成编译生成编译生成)继继继继续执行。续执行。续执行。续执行。n nSetupSetup程序完成装载临时程序完成装载临时程序完成装载临时程序完成装载临时GDTGDT、IDTIDT描述符,打开描述符,打开描述符,打开描述符,打开A20A20地址线,地址线,地址线,地址线,初始化初始化初始化初始化PICPIC中断控制器,最后由实模式跳入保护模式。完成了中断控制器,最后
24、由实模式跳入保护模式。完成了中断控制器,最后由实模式跳入保护模式。完成了中断控制器,最后由实模式跳入保护模式。完成了实模式向保护模式的转换之后,实模式向保护模式的转换之后,实模式向保护模式的转换之后,实模式向保护模式的转换之后,setupsetup跳转到内核跳转到内核跳转到内核跳转到内核ENTRY_POINTENTRY_POINT入口点。入口点。入口点。入口点。7、GeekOS系统源代码结构系统源代码结构 n nGeekOSGeekOS操作系统源文件可以从操作系统源文件可以从操作系统源文件可以从操作系统源文件可以从 下载下载下载下载 8、GeekOS系统源代码结构系统源代码结构 9、GeekO
25、S的设计项目的设计项目 项目项目项目项目0 0:项目:项目:项目:项目0 0要求实现一个内核进程,功能是实现要求实现一个内核进程,功能是实现要求实现一个内核进程,功能是实现要求实现一个内核进程,功能是实现从键盘接收一个按键,并在屏幕上显示。主要是让学从键盘接收一个按键,并在屏幕上显示。主要是让学从键盘接收一个按键,并在屏幕上显示。主要是让学从键盘接收一个按键,并在屏幕上显示。主要是让学生熟悉生熟悉生熟悉生熟悉GeekOSGeekOS的编译、运行过程,了解计算机系统的编译、运行过程,了解计算机系统的编译、运行过程,了解计算机系统的编译、运行过程,了解计算机系统的启动原理。的启动原理。的启动原理。
26、的启动原理。项目项目项目项目1 1:项目要求学生熟悉:项目要求学生熟悉:项目要求学生熟悉:项目要求学生熟悉ELFELF文件格式,并编写代文件格式,并编写代文件格式,并编写代文件格式,并编写代码对码对码对码对ELFELF文件进行分析,并将分析传送给加载器。主文件进行分析,并将分析传送给加载器。主文件进行分析,并将分析传送给加载器。主文件进行分析,并将分析传送给加载器。主要让学生熟悉可执行链接文件(要让学生熟悉可执行链接文件(要让学生熟悉可执行链接文件(要让学生熟悉可执行链接文件(ELFELF文件)的结构,文件)的结构,文件)的结构,文件)的结构,并学会加载和运行可执行文件。并学会加载和运行可执行
27、文件。并学会加载和运行可执行文件。并学会加载和运行可执行文件。项目项目项目项目2 2:要求学生实现对用户态进程的支持。在项目:要求学生实现对用户态进程的支持。在项目:要求学生实现对用户态进程的支持。在项目:要求学生实现对用户态进程的支持。在项目2 2实现之前,实现之前,实现之前,实现之前,GeekOSGeekOS一直使用内核进程。对用户态进一直使用内核进程。对用户态进一直使用内核进程。对用户态进一直使用内核进程。对用户态进程执行的支持包括用户态进程结构的初始化、用户进程执行的支持包括用户态进程结构的初始化、用户进程执行的支持包括用户态进程结构的初始化、用户进程执行的支持包括用户态进程结构的初始
28、化、用户进程空间的初始化、用户进程切换和用户程序导入等。程空间的初始化、用户进程切换和用户程序导入等。程空间的初始化、用户进程切换和用户程序导入等。程空间的初始化、用户进程切换和用户程序导入等。该项目中,存储分配依然使用分段分配方式。实现项该项目中,存储分配依然使用分段分配方式。实现项该项目中,存储分配依然使用分段分配方式。实现项该项目中,存储分配依然使用分段分配方式。实现项目目目目2 2后,用户就可以使用后,用户就可以使用后,用户就可以使用后,用户就可以使用GeekOSGeekOS提供的命令行解释器提供的命令行解释器提供的命令行解释器提供的命令行解释器ShellShell运行一些命令来执行运
29、行一些命令来执行运行一些命令来执行运行一些命令来执行PFATPFAT文件系统内的用户测文件系统内的用户测文件系统内的用户测文件系统内的用户测试程序。试程序。试程序。试程序。项目项目项目项目3 3:要求学生改进:要求学生改进:要求学生改进:要求学生改进GeekOSGeekOS的调度程序,实现基于的调度程序,实现基于的调度程序,实现基于的调度程序,实现基于4 4级反馈队列的调度算法(初始级反馈队列的调度算法(初始级反馈队列的调度算法(初始级反馈队列的调度算法(初始GeekOSGeekOS系统仅提供了系统仅提供了系统仅提供了系统仅提供了FIFOFIFO进程调度算法),并实现信号量,支持进程间通进程调
30、度算法),并实现信号量,支持进程间通进程调度算法),并实现信号量,支持进程间通进程调度算法),并实现信号量,支持进程间通信。信。信。信。GeekOS的设计项目的设计项目 项目项目项目项目4 4:要求学生实现分页虚存管理,以替代在项目:要求学生实现分页虚存管理,以替代在项目:要求学生实现分页虚存管理,以替代在项目:要求学生实现分页虚存管理,以替代在项目1 1和和和和项目项目项目项目2 2中采用的分段存储管理。实现分页虚存管理后。系中采用的分段存储管理。实现分页虚存管理后。系中采用的分段存储管理。实现分页虚存管理后。系中采用的分段存储管理。实现分页虚存管理后。系统在内存不够的情况下就可以将部分页调
31、到硬盘,以释放统在内存不够的情况下就可以将部分页调到硬盘,以释放统在内存不够的情况下就可以将部分页调到硬盘,以释放统在内存不够的情况下就可以将部分页调到硬盘,以释放内存实现虚拟存储技术。内存实现虚拟存储技术。内存实现虚拟存储技术。内存实现虚拟存储技术。项目项目项目项目5 5:要求实现:要求实现:要求实现:要求实现GOSFSGOSFS文件系统。由于文件系统。由于文件系统。由于文件系统。由于GeekOSGeekOS使用了使用了使用了使用了虚拟文件系统,可以加载不同的文件系统,而系统默认加虚拟文件系统,可以加载不同的文件系统,而系统默认加虚拟文件系统,可以加载不同的文件系统,而系统默认加虚拟文件系统
32、,可以加载不同的文件系统,而系统默认加载的是载的是载的是载的是PFATPFAT只读文件系统。在这个项目中,需要实现一只读文件系统。在这个项目中,需要实现一只读文件系统。在这个项目中,需要实现一只读文件系统。在这个项目中,需要实现一个多极目录的、可读写的文件系统。个多极目录的、可读写的文件系统。个多极目录的、可读写的文件系统。个多极目录的、可读写的文件系统。项目项目项目项目6 6:要求为文件系统增加访问控制列表,并使用匿名:要求为文件系统增加访问控制列表,并使用匿名:要求为文件系统增加访问控制列表,并使用匿名:要求为文件系统增加访问控制列表,并使用匿名半双工管道实现进程间通信。半双工管道实现进程间通信。半双工管道实现进程间通信。半双工管道实现进程间通信。GeekOS的设计项目的设计项目