-
Notifications
You must be signed in to change notification settings - Fork 1
7月11日学习笔记
操作系统(RISC-V)2020
授课老师:向勇、陈渝
第一讲:操作系统概述
1.1 课程概述
—— 程序设计语言(汇编、C和Rust),不是开发应用程序,而是开发系统程序
C不对应特定体系结构,灵活性
Rust对类型检查比C严格,语言级别上提供了对并发、同步的支持
—— 数据结构
计算机组成原理:Patterson的RISC-V原理
—— 编译原理
1.2 教学安排
参考教材:(1)Operating Systems:Three Easy Pieces 操作系统:三大简易元素;(2)Operating System Concepts 操作系统概念;(3)Operating Systems: Internals and Design Principles 操作系统:精髓与设计原理
(1)操作系统结构;(2)中断及系统调用;(3)内存管理;(4)进程管理;(5)处理机调度;(6)同步互斥;(7)文件系统;(8)I/O子系统
rCore实验:基于RISC-V用rust写教学操作系统 1、独立式可执行程序;2、最小化内核;3、中断;4、内存管理;5、内存虚拟化;6、内核线程;7、线程调度;8、进程;9、文件系统;10、同步互斥
1.3 什么是操作系统
没有公认的精准的定义。
百科全书:操作系统是管理硬件资源、控制程序运行、改善人机界面和为应用软件提供支持的一种系统软件。
操作系统是一个控制程序: 1、一个系统软件 2、控制程序执行过程,防止错误 3、执行用户程序,给程序提供服务 4、方便用户使用计算机系统
操作系统是一个资源管理程序: 1、应用程序与硬件之间的中间层; 2、管理各种软硬件资源; 3、提供访问软硬件资源的高效手段; 4、解决访问冲突,确保公平使用
Shell —— 命令行接口 GUI —— 图形用户接口 Kernel —— 操作系统的内部
软件(应用软件、系统软件(系统应用、操作系统(命令行、内核)))
操作系统内核的抽象与特征
操作系统负责CPU资源的管理,数据结构,抽象成进程 磁盘上的数据,抽象成文件 内存,临时存数据的地方,抽象成地址空间
内核特征: 1、并发:计算机系统中同时存在多个运行程序;进程交替执行 2、共享:程序间“同时”访问互斥共享各种资源 3、虚拟:每个程序“独占”一个完整的计算机 4、异步:服务的完成时间不确定,也可能失败
1.4 为什么要学习和如何学习操作系统
1、操作系统课是多门课程的综合
结合了 1)程序设计语言;2)数据结构;3)计算机组成原理/体系结构;4)编译技术, OS基本理论基础:操作系统概念和原理 OS设计与实现:操作系统源代码&实践技能
OS是计算机科学研究的基石之一
图灵奖:67年,不少科学家获得了图灵奖
产业:.... 大学:....
学术研究协会: SOSP、OSDI、HotOS ACM SIGOPS Hall-of-Fame Awards USENIX USENIX-ATC
并发问题 管理硬件:CPU、内存、磁盘 时间依赖行为、非法行为、硬件故障
操作系统代码必须是高效的、低耗能、安全可靠: 1、OS要及时地给应用提供合理资源; 2、OS出错意味着机器出错; 3、OS必须比用户程序拥有更高的稳定性;
系统思维 需要考虑应用和硬件 权衡资源:eg.时间与空间——性能的可预测性与公平性 软硬协同:如何让中断、异常、上下文切换真正有效?TLB是如何工作的?这对页表又意味着什么?
1.5 操作系统实例
1、Multics OS,以Compatible Time-Sharing System 为基础,多人多任务OS,PL/I 分层文件目录 分时调度 二维虚拟内存
2、UNIX家族,
3、Linux家族,社区的方式
4、MacOS
5、Windows家族
6、Android操作系统
7、Fuchsia操作系统:AIoT操作系统的代表之一
Topaz:Runtime/前端框架和系统UI/系统程序,提供Flutter支持,及其应用程序;
Peridot:系统框架和相关处理Fuchsia的模块化应用程序设计,跨设备保存信息;
Garnet:平台相关基础库和服务,包括硬件的驱动程序(网络、图形等)和软件安装;
Zircon内核:处理硬件访问和软件之间的通信
1.6 操作系统历史
单用户系统(1945-1955),手动连线/纸带传输进行程序输入,机器成本远大于人力成本;操作系统=装载器(loader)+程序库(libraries),问题:昂贵组件的低利用率
批处理系统(1955-1965),磁带/磁盘传输进行程序输入,机器成本大于人力成本;操作系统=装载器(loader)+程序控制器(sequencer)+输出处理器(output processor),问题:相比以前利用率提高
多道程序系统(1955-1980),多个程序驻留内存中,多个程序轮流使用CPU,操作系统=装载器+程序调度+内存管理+输出管理,演变:相比以前利用率提高
分时系统(1970-),多个程序驻留内存中,多个程序分时使用CPU,操作系统=装载器+程序调度+内存管理+中断处理+...,演变:相比以前利用率提高
个人计算机(1981-),单用户,CPU利用率已不再是最重要的关注点,重点是用户界面和多媒体功能,操作系统=装载器+程序调度+内存管理+中断处理+...,演变:走向大众,老的服务和功能不存在,越来越多的安全问题
分布式计算(1990-),分布式多用户,分布式系统利用率是关注点,重点是网络/存储/计算的效率,操作系统=分布式(装载器+程序/OS 调度+内存管理),演变:走向大众,走向网络,新的挑战(不可靠/不确定)
AIoT系统(2000-),分布式多设备,分布式系统利用率/可用性是关注点,重点是网络/存储/计算的效率,操作系统=分布式(程序/OS调度+内存管理+安全/更新),演变:走向设备,走向网络,新的挑战(不可靠/大数据)
1.7 操作系统结构
MS-DOS:在最小的空间,设计用于提供大部分功能(1981-1994),没有拆分位模块,主要用汇编编写,没有安全保护
单体分层结构:将单体操作系统(Monolithic OS)划分为多层(levels),每层建立在低层之上,最底层(layer 0)是硬件驱动,最高层(layer N)是用户界面,每一层仅使用更低一层的功能和服务
微内核结构:只留最小功能,消息传输机制,灵活,安全,性能会比较差
x-kernel:隔离,上层只做资源的分配,安全绑定,OS分成了两部分,资源的使用由应用决定,lite-OS,保护和控制分离
虚拟机结构:
1.8 操作系统实验概述
设计uCore/rCore,覆盖操作系统的关键点:
外设:I/O管理/中断管理
内存:虚存管理/页表/缺页处理/页替换算法
CPU:进程管理/调度器算法
并发:信号量实现和同步互斥应用
存储:文件系统+磁盘驱动
lab1:Bootloader/Interrupt/Debug,启动操作系统的bootloader,了解操作系统启动前的状态和要做的事,了解运行操作系统的硬件支持,操作系统如何加载到内存中,理解两类中断-外设中断、异常等
编译运行直接与硬件交互的系统程序
启动bootloader的过程
实现中断处理机制
输出字符的方法
调试系统程序的方法
lab2:物理内存管理:理解分页模式,了解操作系统如何管理连续空间的物理内存
理解内存地址的转换和保护
实现页表的建立和使用方法
实现物理内存的管理方法
了解常用的减少碎片的方法
lab3:虚拟内存管理:了解页表机制和换出(swap)机制,以及中断-“故障中断”、缺页故障处理等,基于页的内存替换算法
理解换页的软硬件协同机制
实现虚拟内存的Page Fault异常处理
实现页替换算法
lab4:内核模式线程管理:了解如果利用CPU来高效地完成各种工作的设计与实现基础,如何创建相对于用户进程更加简单的内核态线程,如何对内核线程进行动态管理等
建立内核线程的关键信息
实现内核线程的管理方法
lab5:用户模式进程管理:了解用户态进程创建、执行、切换和结束的动态管理过程,了解在用户态通过系统调用得到内核态的内核服务的过程
建立用户进程的关键信息
实现用户进程管理
分析进程和内存管理的关系
实现系统调用的处理过程
lab6:调度:理解操作系统的调度过程和调度算法
熟悉系统调度器框架,以及内置的Round-Robin调度算法
基于调度器框架实现一个调度器算法
lab7:同步互斥,了解进程间如何进行信息交换和共享,并了解同步互斥的具体实现以及对系统性能的影响,研究死锁产生的原因,以及如何避免死锁
熟悉同步互斥的实现机制
理解基本的spinlock、semphpore、condition variable的实现
实现基于各种同步机制的同步问题
lab8:文件系统,了解文件系统的具体实现,与进程管理等的关系,了解缓存对操作系统IO访问的性能改进,了解虚拟文件系统(VFS)、buffer cache和disk driver之间的关系
掌握基本的文件系统系统调用的实现方法
了解一个基于inode方式的SFS文件系统的设计与实现
了解文件系统抽象层-VFS的设计与实现
labX:大实验
重新设计zircon操作系统
在一个OS(如Linux)实现一个Hypervisor
OS直接支持运行被隔离的应用程序
支持动态更新的OS
驱动程序运行在用户态的OS
支持标签化CPU的OS
一个可验证正确性的OS
运行在抽象计算机上可动态调试的OS