深入理解计算机系统第一章小结。
程序就是数据和指令的集合。
将编写的程序代码翻译为可执行程序的过程需要经历4个阶段,这4个阶段统称为编译系统。
系统硬件组成
总线:
贯穿整个系统的电子管道,称为总线。他携带字节并在各个部件之间传递。
I/O设备:
是系统与外部的联系通道,比如作为输入设备的键盘,作为输出设备的显示器还有磁盘等。
主存:
系统临时存储设备。用来存放程序和程序处理的数据。简称DRAM。
处理器:
CPU,执行指令。由寄存器等部件组成。
运行程序
① 当我们在键盘上输入内容时shell程序将输入内容读到寄存器再存入内存
②当我们敲击回车时shell程序知道我们已经结束了命令输入。然后shell程序执行一系列指令来加载可执行文件hello文件。
③这些程序将hello目标文件中的代码从磁盘复制到主存“包括“”最终输出字符串hello,world
④代码数据加载到主存处理器就开始执行hello程序的main程序的机器指令,字符串的字节从主存复制到寄存器再从寄存器中复制到显示设备。
高速缓存
处理器近期要执行的指令都会放在高速缓存中,极大提高处理速度。
缓存结构L1-L3 数字越高速度越慢。
操作系统管理硬件
防止硬件被失控程序滥用。
像应用程序提供简单一致的机制来控制复杂的各种设备。
操作系统通过几个抽象概念(进程、虚拟内存、文件)来实现上述功能。
其中进程是对处理器、主存、IO设备的抽象 其他同理。
进程:
是计算机资源分配的最小单位,
进程是操作系统对一个正在运行的程序的一种抽象。
一个CPU好像同时执行多个进程是通过上下文切换实现的。
操作系统保持跟踪进程运行所需的所有状态信息,称为上下文。
假设两个进程 shell和hello ,
最开始我们在shell中让他执行hello程序,shell专门调用一个函数既系统调用来执行我们的请求,系统调用将控制权传递给操作系统,操作系统保存shell的上下文,创建一个新的进程hello及其上下文,将控制权给hello进程,hello进程终止后操作系统恢复shell的上下文,并给shell控制权。
shell进程等待下一个命令输入。
从一个进程到另一个进程的切换是操作系统内容管理,内核是操作系统系统代码常驻主存的部分,当应用程序需要操作系统的某些操作,比如读写文件,他就执行一个特殊指令“系统调用”,将控制权给内容,内核执行请求的操作返回给程序。
内核不是一个独立进程,他是系统管理全部进程所用代码和数据结构的集合。
线程
线程是计算机调度的最小单位。
多线程比多进程更容易共享数据。线程更高效,多处理器时多线程可以使程序运行的更快。
每个线程都运行在进程的上下文中共享同样的代码和全局数据。
虚拟内存
是抽象概念,为每一个进程提供一个自己独占内存的假象,每个进程看到的内存都是一致的,成为虚拟地址空间。
堆
堆的大小可以在运行时铜带扩展和收缩。
栈
编译器用它来实现函数调用,动态扩展和收缩。
内核虚拟内存
为内核保留,不允许程序读写这个区域
文件
就是字节序列,每个IO设备磁盘显示器等都可以看做是文件。
系统所有输入输出都是通过IO系统调用读写文件实现的。
网络也是一种IO设备。
线程级并发
单处理器在多个任务间切换。
超线程
每个单位时间内,一个单运行管线的CPU只能处理一个线程,以这样的单位进行,如果想要在一单位时间内处理超过一个线程是不可能的,除非是有两个CPU的实体单元。双核技术技术是将两个一样的CPU放置于一个封装内(或直接将两个CPU做成一个芯片),而英特尔的多线程技术是在CPU内部仅复制必要的资源、让两个线程可同时运行;在一单位时间内处理两个线程的工作,模拟实体双核心、双线程运作。