计算机系统

深入理解计算机系统中关于系统的摘要

计算机系统

一、硬件组织

1.1 总线

总线被设计成传送定长的字节块,也就是(word)。现在大多数机器要么是4个字节(32位),要么是8个字节(64位)。

1.2 I/O设备

I/O设备是是系统与外部的联系通道。基本的I/O设备包括:作为用户输入的鼠标和键盘、作为用户输出的显示器和用于长期存储数据和程序的磁盘驱动器(磁盘)。

每一个I/O设备都通过一个控制器适配器与I/O总线相连。控制器是IO设备本身或者系统的主印制电路板(主板)上的芯片组。适配器是插在主板插槽上的卡。

1.3 主存

主存是一个临时存储设备。在处理器执行程序时,用来存放程序和程序处理的数据。从物理上来讲,主存是一组动态随机存取存储器(DRAM)组成的;从逻辑上来说,存储器是一个线性的字节数组,每个字节有唯一的地址

1.4 处理器

中央处理单元(CPU),简称处理器,是解释(执行)存储在主存中指令的引擎。处理器的核心是一个大小为一个字的存储设备(或寄存器),称为程序计数器(PC)。

从系统通电开始,直到系统断电,处理器一直在不断地执行程序计数器指向的指令,再更新计数器,使之指向下一条指令。

二、操作系统

操作系统的两个基本功能:(1)防止硬件被失控的应用程序滥用;(2)向应用程序提供简单一致的机制来控制复杂而又通常不同的低级硬件设备。

2.1 进程

进程是操作系统对一个正在运行的程序的一种抽象。在一个系统上可以同时运行多个进程,每个进程像是独占地使用硬件。

一个CPU看上去在并发地执行多个进程,这是通过进程间的切换实现的。操作系统实现这种交错执行的机制称为上下文切换,操作系统保持跟踪进程运行所需的所有的状态信息,这些状态信息就是上下文

2.2 线程

在现代操作系统中,一个进程实际上是可以由多个称为线程的执行单元组成,每个线程运行在进程的上下文中,并共享同样的代码全局数据

2.3 虚拟内存

虚拟内存是一个抽象概念,为每一个进程提供了一个假象——每个进程在独占地使用主存。每个进程看到地内存都是一致地,称为虚拟地址空间

Linux进程地虚拟地址空间是由大量准确定义地区域组成的。从低地址到高地址主要有:

  • 只读的代码和数据、读/写数据:对所有的进程来说,代码是从一个固定的地址开始的。代码区和数据区是直接按照可执行目标文件的内容初始化的。
  • 运行时堆:堆可以在运行时进行动态地扩展和收缩
  • 共享库:大约在地址空间的中间部分。
  • 用户栈:编译器用它来实现函数调用。每调用一个函数,栈就会增长;从一个函数返回时,栈会收缩。
  • 内核虚拟内存:为内核保留,不允许应用程序读写这个区域的内容或者直接调用内核代码定义的函数。相反,必须调用内核来执行这些操作。

2.4 文件

文件就是字节序列。每一个IO设备甚至是网络,都可以看成是文件。系统中的所有输入输出都是通过一组Unix I/O的系统函数调用读写文件来实现的。

三、计算机系统中的抽象

  • 文件是对I/O设备的抽象
  • 虚拟内存是是对程序存储器的抽象(主存和磁盘的抽象)
  • 进程是对一个正在运行的程序的抽象(处理器、主存和I/O设备的抽象)

参考资料

【0】深入理解计算机系统