本文主要是介绍(两百七十四)《Operating Systems: Three Easy Pieces》读书笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前言:操作系统的知识比较欠缺,买了本《操作系统导论》补充下知识,作者为雷姆兹和安德莉亚。
官网(可以免费查阅英文版pdf):
http://pages.cs.wisc.edu/~remzi/OSTEP/
第一章 关于本书的对话
简要说明本书是以虚拟化、并发和持久化三方面展开的,引入如下问题
- 操作系统如何工作
- 线程、进程如何调度
- 如何处理内存过载
- 虚拟机监控器如何工作
- 如何管理磁盘数据
第二章 操作系统介绍
引入问题:
1.操作系统通过哪些机制和策略实现虚拟化?操作系统如何有效地实现虚拟化?需要哪些硬件支持?
首先什么是虚拟化呢?个人理解是对应于实体的,比如我们组装电脑是cpu、内存、显卡、硬盘、电源和显示器等实体,这些实体对应于操作系统有其对应的虚拟对象,这个对应过程就是虚拟化。这也是为什么操作系统也叫做虚拟机。
虚拟化分为
虚拟化CPU:通过时分复用,但现在比如8核的CPU应该也有所谓的空分复用的概念,提高CPU的使用率。
虚拟化内存:每个进程有自己的私有虚拟地址空间,映射物理内存
2.并发是什么?
书中没有直接讲,个人理解并发是多个进程一起执行对某个数据的操作,并发问题在Android中一般也被称为同步问题,一般通过加锁互斥解决,这样同一时间点只有单一进程会修改数据。
3.持久性
持久性相对于内存中的缓存而言,个人理解就是可以存储到硬盘,下次开机还能读取的特性。
串联起来时操作系统取得CPU、内存或磁盘等物理资源,并对他们进行虚拟化,处理与并发有关的问题,持久地存储数据。
第三章 关于虚拟化的对话
对话大概以桃子举例,比如我在微信群里说我有个桃子,这其实已经用语言虚拟化桃子这个实体了,微信群里看到的人都会对应理解我有个桃子,相当于new出了好多个虚拟的桃子。
第四章 抽象:进程
进程是什么?
开头说进程非正式定义可理解为运行中的程序,对应到Android中不光光是app,系统进程也是进程。
进程的机器状态:内存 + 寄存器
进程创建流程?
加载代码和静态数据到内存中
为运行时栈和堆分配内存
(栈:存放局部变量、函数参数和返回地址 堆:C语言中用于显示请求的动态分配数据)
IO:UNIX中每个进程有3个打开的文件描述符,用于标准输入、输出和错误
上下文切换
CPU虚拟化需要一些低级机制和高级智能:引入了上下文切换+调度策略的概念
上下文切换:对于停止的进程,寄存器上下文将保存其寄存器的内容,通过恢复这些寄存器,操作系统可以恢复运行该进程。
第五章 插叙:进程API
这一章其实很简单,注意讲了三个api的使用,fork(),wait() 和 exec()
捎带讲了重定向的概念,shell重定向是通过执行命令之前先关闭了标准输出,打开了指定文件,这样运行的结果就被重定向了指定文件,另外还有管道连接有类似的概念,进程的输出被链接到了一个内核管道上,另一个进程的输入也被连接到了同一个管道上,,类似grep xxx | wc -l 计算找到了多少词
这篇关于(两百七十四)《Operating Systems: Three Easy Pieces》读书笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!