(两百七十四)《Operating Systems: Three Easy Pieces》读书笔记

2023-12-19 07:18

本文主要是介绍(两百七十四)《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》读书笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/511331

相关文章

LibSVM学习(六)——easy.py和grid.py的使用

我们在“LibSVM学习(一)”中,讲到libSVM有一个tools文件夹,里面包含有四个python文件,是用来对参数优选的。其中,常用到的是easy.py和grid.py两个文件。其实,网上也有相应的说明,但很不系统,下面结合本人的经验,对使用方法做个说明。        这两个文件都要用python(可以在http://www.python.org上下载到,需要安装)和绘图工具gnup

《C++标准库》读书笔记/第一天(C++新特性(1))

C++11新特性(1) 以auto完成类型自动推导 auto i=42; //以auto声明的变量,其类型会根据其初值被自动推倒出来,因此一定需要一个初始化操作; static auto a=0.19;//可以用额外限定符修饰 vector<string> v;  auto pos=v.begin();//如果类型很长或类型表达式复杂 auto很有用; auto l=[] (int

读书笔记(一):双脑记

谁又知道年轻人那反复无常的大脑有着怎样的运行机制?尽管他们的大脑已被荷尔蒙折腾地七荤八素;却偶尔还会有灵感跻身夹缝之间; 层级化:每时每刻,人类都在进行抽象化,也就是说,从客观事实中发展出更具普遍意义的理论和知识。利用这种方法,我们得以不断地开发出新的更为简洁的描述层级,方便我们那容量有限的大脑加以处理。分层的概念几乎可以应用于任何复杂系统,甚至包括我们的社交世界,也即是人们的个人生

Three 渲染器(二)

WebGL1Renderer 构造函数 WebGL1Renderer( parameters : Object ) Creates a new WebGL1Renderer. 属性 See the base WebGLRenderer class for common properties. 方法 See the base WebGLRenderer class for common

leetcode#628. Maximum Product of Three Numbers

题目 Given an integer array, find three numbers whose product is maximum and output the maximum product. Example 1: Input: [1,2,3]Output: 6 Example 2: Input: [1,2,3,4]Output: 24 Note: The lengt

2024.09.07【读书笔记】| SMRTLink工具对PB组装疑难解答

在使用SMRT Link的pb_assembly_hifi命令进行组装分析时,可以参考以下步骤和信息: 使用pbcromwell show-workflow-details pb_assembly_hifi命令查看该工作流的详细信息。这将帮助你了解所需的输入参数和可选输入参数。 根据工作流的要求,你需要准备相应的输入文件。例如,对于单样本基因组组装,需要CCS(连续测序)的fastq文件路径作

11991 - Easy Problem from Rujia Liu?

题意: 输入一串整型数列,再输入两个数k,v,输出第k个v的序号。不存在则输出0,如第一个样例 8 41 3 2 2 4 3 2 11 3 //第1个3,序号为2,输出22 4 //第2个4,不存在,输出03 2 //第3个2,序号为7,输出74 2 思路: struct num {

密码学读书笔记小结

密码学是保证消息的私密性和完整性以及消息认证的基础。加密算法的选择和密钥的管理是安全机制的效率、性能和可用性的关键。 公钥加密算法: 分发密钥比较容易,但是对大数据量的加密性能较差密钥加密算法: 更适合大批的加密任务混合型加密协议: 例如TLS,先用公钥加密建立一个安全通道,然后使用通道交换密钥,并将此密钥用于后续数据交换。 对分布式系统攻击的分类: 窃听: 未经授权获得消息副本伪装: 在未

【开发工具】开发过程中,怎么通过Easy JavaDoc快速生成注释。

文章目录 引言什么是Easy JavaDoc?Easy JavaDoc用来干什么?如何使用Easy JavaDoc?安装Easy JavaDoc配置Easy JavaDoc使用Easy JavaDoc生成注释 Easy JavaDoc与IDEA自带注释的区别IDEA自带注释Easy JavaDoc Easy JavaDoc的优缺点优点缺点 步骤 1:打开设置步骤 2:找到Easy JavaD

《设计模式:可复用面向对象软件的基础》读书笔记(3)

这篇博客记录了书中《第3章:创建型模式》里的要点。 介绍 创建型设计模式抽象了实例化过程。 在这些模式中有两个不断出现的主旋律: 他们都将关于该系统使用哪些具体的类的信息封装起来。他们隐藏了这些类的实例是如何被创建和放在一起的。 整个系统关于这些对象所知道的是由抽象类所定义的接口。因此,创建型模式在什么被创建、谁创建它、它是怎样被创建的,以及何时被创建等方面给予你很大的灵活性。 下面将这