《深入理解计算机系统》读书笔记(第一章)

主要内容

0.计算机系统是由硬件和系统软件组成的,它们共同工作来运行应用程序。
1.程序是怎样编译运行。
2.进程,线程,虚拟内存,文件等基本概念。
3.本书内容提前浏览。

信息就是位+上下文

本书用了一个hello.c的表示方法说明了一个思想:无论是磁盘文件还是内存中的程序亦或是网络上传的数据都是一串比特表示的,区分他们的根据是上下文不同,正如标题说的信息就是位+上下文

程序被其他程序翻译成其他格式

如hello.c这个程序被GCC编译器(另一个程序)编译的过程:
hello.c —0—> hello.i —1—> hello.s —2—> hello.o —3—> hello
0.预处理器,处理后仍然是文本(注释没了,宏定义替换)。详细效果见预处理
1.编译器,处理后是汇编语言的文本。
2.汇编器,处理后变成可重定位的目标程序。
3.链接器,可执行目标程序。

系统的硬件组成

0.总线

贯穿整个系统的是一组电子管道,称为总线。它携带信息字节并负责在各个组件之间传递。通常总线被设计成传送定长的字节,我们通常称为字(word)。ps:哈哈哈,原来如此,这应该就是我们所说电脑有啥32位又是64位。

1.I/O设备

I/O设备是系统与外界联系的通道。比如键盘呀,鼠标呀,显示屏,还有负责存储的磁盘等都是I/O设备。

每个I/O设备都通过一个控制器适配器与I/O总线相连。
通俗地说控制器是I/O设备本身或者主板上的芯片组,适配器是插在主板插槽上的卡。

2.主存

通俗的说使我们所说的内存,主存是一个临时存储设备,在处理器执行程序时来放置程序运行时所处理的数据。就像车的后备箱,车就是运行的程序。

3.处理器

CPU,中央处理单元,负责运算……
这里写图片描述

运行hello程序

ps:不得不说CSAPP确实本神书,它巧妙的用了一个小节的内容就把从在终端输入./hello到终端显示hello,world的全过程总结出来。
大体上是这样的:
我的总结:
Linux的shell其实也是一个程序,他在等待用户输入指令,输入什么他就听话地去做,当用户将./hello输入到终端,按下回车,这条指令就逐字保存到主存中。
然后,主存的指令传给处理器,处理器恍然大悟,“原来你要运行×目录下的hello程序呀!”。后来,磁盘中的hello程序的数据就会被复制到主存中,最后通过I/O设备(显示屏)输出hello,world

进程,线程的基本概念

进程

进程是对系统正在运行程序的一种抽象,系统一般是多进程的,也就是同时进行多个程序,而进程与进程之间的调度转换是由系统内核完成的。
就比如说shell和hello程序,当输入./hello时hello程序开始运行,此时shell进程挂起(系统保存shell进程上下文)。待hello进程over,shell继续进行,等待用户输入指令。
进程之间的切换

线程

在现代操作系统中,一个进程可以由多个执行单元组成(线程)。线程在进程的上下中,共享着进程的代码和全局数据。
注:多线程比多进程更容易实现共享数据

虚拟内存

虚拟内存是计算机系统内存管理的一种技术。
它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。与没有使用虚拟内存技术的系统相比,使用这种技术的系统使得大型程序的编写变得更容易,对真正的物理内存(例如RAM)的使用也更有效率。

文件

Linux上一切皆文件,这是一个学长给我推荐Linux时说的。每个I/O设备,键盘、鼠标、显示器,甚至是网络都可以看成文件。系统之间通过网络连接,而网络其实可以看成I/O设备(文件),一个系统将信息复制到网络适配器,数据流通过网络到另一个系统。

最后总结

操作系统内核是程序和硬件之间的媒介。它提供三种基本的抽象:文件是对I/O设备的抽象虚拟主存是对主存和硬盘的抽象进程是处理器、主存和I/O设备的抽象

这里写图片描述

注:

本篇文章的大部分内容是来自《深入理解计算机系统》,还包括我的一些总结。目前大一,知识储备有限,哪些地方总结有误,请在评论区指出,我会进行修改。
本文包括以后发的某些文章会随着我的深入学习进行修改和扩充,敬请期待……

猜你喜欢

转载自blog.csdn.net/sunmaoxiang/article/details/80213063