操作系统实验 uCore
- 操作系统:没有一个完整、精确、工艺的定义
- 功能区分:cpu 磁盘 内存
- 应用软件:办公软件、视频播放软件
- 操作系统位于应用软件之下,为应用软件提供服务支撑
- 操作系统对外:两个接口:一个是外壳(shell),而不是内核(kernel)kernel是我们的研究中带你,在shell之下。
- 操作系统内部细化需要管理那些内容? CPU 内存 磁盘是主要的三大块。CPU涉及到CPU调度器以及进程和线程管理。内存涉及到物理内存管理、虚拟内存管理,对于disk而言,以此盘块为基本的读写单位,做文件系统,通过文件系统来管理。
- 终端处理和IO设备驱动 和底层直接打交道:有了中断这部分??
- 操作的4个系统特征:
- 并发:计算机系统中同时存在多个运行的程序,需要OS管理和调度,一个时间点上多个程序同时运行
- 并行:多个CPU,一个时间段之内多个程序同时运行
- 共享:如何让资源共享给有需要的程序
- 互斥共享
- 虚拟
- 操作系统面向硬件,将其虚拟化,将CPU虚拟化为进程等
- 利用多道程序设计技术,让每个用户都觉得有一个计算机专门为他服务
- 异步 程序的执行不是一贯到底,而是走走停停,向前推进的速度不可与之
- 但只要运行环境相同,OS需要保证程序运行的结果也要相同,即使是异步,也要保证结果相同
什么是操作系统?
- 用户角度上,操作系统是一个控制软件
- 管理应用程序
- 资源分配的分配器,计算机里的各种资源不同的外设、CPU,需要操作系统协调好,需要不同时刻有不同的分配。
- 磁盘抽象为文件,内存抽象为地址空间
- 层次结构:中间层的系统软件。承上启下的作用 硬件之上 应用程序之下
为什么学习操作系统?
- 结合不同的课程的总结归纳
- 程序设计语言
- 数据结构
- 计算机体系结构
- 操作系统概念和原理,源代码
- 技能
- 操作系统的设计和实现
- 已有很多操作系统,例如windows、linux,操作系统还在不停的发展!
- 面向桌面、面向服务器、工控领域、手机端的操作系统。经典实例:UNIX BSD伯克利软件发行版,linux仿unix操作系统。Linux是一个大学生写的,听到这真的感觉自己的大脑不是大脑的感觉。
操作系统的历史和演变过程
————————————————
- 时钟会定时器的终端切换任务
操作系统结构
- unix操作系统提供了很多层次,汇编语言与机器绑定性,所以没有移植性。定时器驱动、中断服务、引导装置。
- 微内核的设计,操作系统内核只放最基本的功能。服务和服务之间通过内核的消息传递机制来通讯,很灵活,内核通过地址隔离使得无法破坏其他的地址。交互通过将数据导入内核,内核再将其导给内存管理的子系统,有利有弊。很少有这种微内核的设计。
- ?? OS的功能和一些应用结合起来,可以设计一些应用,使其速度越来越快,主要在学术界。目前还在研究
- 虚拟机(VMs):虚拟出多台计算机系统——虚拟出完整的计算机,有了VMs,一台计算机变成了多台。
操作系统的启动
- 启动
- 计算机体系结构概述
- 最基本就三部分:CPU、Memory、IO
- BIOS:基本I/O处理系统,检测各种各样的外设,检测完外设之后才能加载各种服务。
- Bootloader:加载OS,512个字节
- DISK:存放OS
- POST(加电自检),寻找显卡和执行BIOS
- 计算机内存和硬盘布局
- 开机顺序
- 操作系统与设备和程序交互
- interface 系统调用、异常、中断
- 系统调用:应用程序主动向操作系统发出服务请求
- 异常(来源于不良应用程序) :非法指令或其他坏的处理状态(如:内存出错)
- 中断(来源于外设):来自不同的硬件设备的计时器和网络的终端
- 在计算机运行中,内核是被信任的第三方 只有内核可以执行特权指令,为了方便应用程序
- 操作系统如何设计和实现中断、异常和系统调用,三者的区别和特点?
- 处理时间:
- 中断:异步
- 异常:同步
- 系统调用:异步或同步
- 响应
- 中断:持续,对用户应用程序是透明的
- 异常:杀死或者重新执行一项不到的应用程序指令
- 系统调用:等待和持续
- 处理时间:
- 中断
- 硬件 这只中断标记【CPU初始化】
- 1 将内部、外部时间设置中断标记
- 2 事件的ID
- 软件
- 保存当前被打断的现场
- 中断服务程序处理
- 清除中断标记
- 回复之前保存的处理状态
- 硬件 这只中断标记【CPU初始化】
- 异常:异常编号
- 保存现场
- 异常处理
- 杀死产生了的异常的程序
- 重新执行异常指令
- 恢复现场
- 系统调用
-
c语言的printf(),会触发系统调用write()。指令会触发一条系统调用write()
- 用户态和内核态
- 内核态:超级系统运行CPU所处的状态,可以执行特权指令
- 用户态: 不能执行某些特权指令
- 从用户态转为内核态或者应用程序和系统拥有各自的堆栈切换,还要完成特权机的转换,开销比函数调用很大,开销是有回报——安全可靠
-
函数调用实际在同一个栈空间
-