【深入理解操作系统】第一章:计算机系统漫游 | A tour of Computer Systems | 阅读笔记

简介: 【深入理解操作系统】第一章:计算机系统漫游 | A tour of Computer Systems | 阅读笔记

前言:

《深入理解操作系统》个人用学习笔记。


Ⅰ. 计算机系统

0x00 计算机系统无处不在

0x01 拆解 PS5

硬件: CPU、GPU、内存、磁盘等。

0x02 系统软件

用于计算机硬件运作或管理运行应用软件的一种软件。

- 操作系统

- 设备驱动程序

- 编译器、链接器和调试器

 

由硬件和系统软件组成,用于运行应用程序。

计算机系统影响程序员程序的正确性和性能。

你将学习: 如何避免由数字表示系统引起的奇怪的数字错误 - 如何优化你的C语言代码 - 过程调用如何实现并避免安全漏洞 - 如何编写你自己的Unix shell,自己的网络服务器等。

Ⅱ.  操作系统之旅

0x00 通过 HelloWorld 程序来探索

💬 hello.c

#include <stdio.h>
int main()
{
    printf("hello, world\n");
}

💬 转换为 ASCII 码表示:

所有信息都以一堆 bits 来表示:

- 磁盘文件、程序、用户数据、网络上传输的数据

- 不同的背景 - 相同的字节序列

- 整数、浮点、字符串或机器指令

0x01 ASCII(美国信息交换标准代码)

 

0x02 编译系统

将高级C语言程序翻译成处理器读取和操作的二进制代码。

0x03 汇编概览

 

0x04 可执行目标程序

一个准备装入内存并由计算机系统执行的程序:

0x05 系统的硬件组成

BUS(总线)

一组电线,携带信息字节并负责在各个部件值间传递。

a collection of electrical wires that carry bytes of information  back and forth between the components.

IO devices(IO 设备)

IO 设备是系统与外界联系的通道。比如,显示器,鼠标,磁盘和网络适配器。

the system’s connection to the external world. ex: display, mouse, disk, and network adapter.

Main memory(主存)

主存是一个临时存储设备,在处理器执行程序时,他被用来存放程序和程序处理的数据。

a temporary storage device that holds both a program and the data it manipulates while the processor is executing the program

Processor or central processing unit (处理器)

中央处理单元(CPU)简称处理器,是解释或执行存储在主存中指令的引擎。

寄存器文件(register file):小型存储器

算数逻辑元(ALU):计算单元

程序计数器(PC):线路指示器

an engine that  interprets or executes program instructions stored in main memory.  

• Register file: small storage  

• Arithmetic/logic unit: computing unit  

• Program counter: line indicator

CPU:中央处理单元

ALU:算数/逻辑单员

PC:程序计数器

USB: 通用串行总线

Ⅲ.  跑一下 "hello" 程序

1. 在shell程序中获得一个执行 "hello "程序的命令。

2. 操作系统将存储在磁盘中的 "hello "可执行程序加载到内存中并开始运行该程序。

3. 一个处理器执行加载的 "hello "程序的指令。

4. 终止后,切换回shell程序

0x00 Shell Program

基于文本的用户界面

- 基于命令行的解释器

- 直接运行命令

- 探索文件系统

- 删除和创建文件

- 浏览路径

- 运行程序

- 打印文本

0x01 从键盘上读取 hello 指令

我们在键盘上输入字符串 ./hello 后,shell 程序就逐一读取字符到寄存器,再把它存放到寄存器中。当我们在键盘上敲回车键时,shell就知道我们已经输完了,然后 shell 会执行一系列指令,这些指令将 hello 目标文件中大哥代码和数据从磁盘拷贝到主存,从而加载 hello 文件。数据包括最终会被输出的字符串 "hello, world\n"  。

0x02 从磁盘加载可执行文件到主存(Loading executable from disk into memory)

这里利用了 DMA技术 (直接存储器存器),使得数据可以不通过处理器,直接从磁盘到达主存。

0x03 将可执行文件从磁盘加载到内存中(Loading executable from disk into memory)

0x04 将 "hello, world" 从内存中写到显示器上(Writing “hello, world” from memory to display)

hello 目标文件中的代码和数据被加载到了处理器后,处理器就开始执行 hello 程序的主程序中的机器语言指令,这些指令将 "hello,world\n" 串中的字节从存储器中拷贝到寄存器文件,再从寄存器中 文件拷贝到 显示设备,最终显示在屏幕上。

0x04 缓存问题(Caches matters)

处理器内存差距不断增大

几百字节的寄存器文件/数百万字节的主内存(但比主内存快100倍)。

为了解决处理器与主存之间的差异,系统设计者采用了更小更快的存储设备 —— 高速缓存存储器(cache memories)。

程序员可以利用缓存来提高其程序的性能。

0x05 存储器层次结构(Memory hierarchy)

就像程序员可以运用 L1 和 L2 的知识来提高程序性能一样,程序员同样可以利用对整个存储器层次模型的理解来提高程序性能。

0x06 操作系统管理硬件(The operating system manages the hardware)

❓ 谁来访问键盘、显示器、磁盘?

操作系统:保护和硬件接口

操作系统为应用软件提供抽象的/假想的硬件环境,以消除硬件细节,并将硬件依赖性与应用软件解耦。应用软件使用这些假想的系统特性(虚拟内存、I/O设备),而操作系统则将这些特性解释为真实的硬件特性。

进程(后来的线程):

操作系统对正在运行的程序的抽象

多个进程可以在同一个系统上同时运行

每个进程似乎都有对硬件的独家使用权

 

虚拟存储器(Virtual memory):Linux 中的进程虚拟地址空间

文件(Files):字节序列,每个I/O设备都被建模为文件键盘、网络等。 读/写。

0x07 利用网络系统和其他系统通信(Systems communicate with other systems using net works)

网络也是一种 I/O 设备。


 

参考资料:

Computer Systems: A Programmer's Perspective (3rd Edition)

相关文章
|
25天前
|
存储 安全 数据处理
【计算机系统组成原理】操作系统处理器深入介绍
【计算机系统组成原理】操作系统处理器深入介绍
|
1月前
|
程序员 Linux 调度
《操作系统》——计算机系统概述
《操作系统》——计算机系统概述
|
6月前
|
安全 Unix Linux
《计算机系统与网络安全》 第八章 操作系统安全基础
《计算机系统与网络安全》 第八章 操作系统安全基础
78 0
YI
|
9月前
|
存储 程序员
操作系统笔记-01计算机系统概述
操作系统笔记-01计算机系统概述
YI
139 0
|
存储 Unix 程序员
【操作系统篇】第二篇——计算机系统概述(下)
【操作系统篇】第二篇——计算机系统概述(下)
【操作系统篇】第二篇——计算机系统概述(下)
|
安全 程序员 Linux
【操作系统篇】第一篇——计算机系统概述(上)(二)
【操作系统篇】第一篇——计算机系统概述(上)
【操作系统篇】第一篇——计算机系统概述(上)(二)
|
程序员 调度 Android开发
【操作系统篇】第一篇——计算机系统概述(上)(一)
【操作系统篇】第一篇——计算机系统概述(上)
【操作系统篇】第一篇——计算机系统概述(上)(一)
|
分布式计算 安全 算法
操作系统的奋斗(一)计算机系统概述
操作系统的奋斗(一)计算机系统概述
199 0
操作系统的奋斗(一)计算机系统概述
|
存储 调度
408操作系统学习笔记——计算机系统概述(下)
408操作系统学习笔记——计算机系统概述
142 1
408操作系统学习笔记——计算机系统概述(下)
|
程序员 人机交互 调度
408操作系统学习笔记——计算机系统概述(上)
408操作系统学习笔记——计算机系统概述
197 1
408操作系统学习笔记——计算机系统概述(上)