计算机系统漫游
系统的硬件组成

总线:贯穿整个系统的一组电子管道,携带信息字节负责在各个部件之间传递。
总线被设计为传送定长的字节块(字word),字中的字节数是一个基本的系统参数,现在的大多数机器字长要么是4个字节(32位),要么是8个字长(64位)。
IO设备(输入/输出):系统与外接设备联系的通道。
用户输入的鼠标和键盘、显示屏、保存数据的磁盘、其他网络类设备。
主存:一个临时存储设备,在处理器执行程序是用来存放程序和程序处理的数据。
从物理上讲主存一组动态随机存储存储器(DRAM)芯片组成,从逻辑上讲是一个线性的字节数组,每个字节都有唯一的地址(数组索引)。
处理器:包括运算器和控制器,解释执行保存在主存中指令的引擎。
处理器的核心是一个大小为一个字的寄存器(PC),从系统通电开始,处理器一直在不断的读取PC寄存器的指令,在更新指令寄存器。
CPU在指令的下可能会执行的操作
- 加载:从主存复制到寄存器
- 存储:从寄存器复制到主存的某个位置,更新原来的内容。
- 操作:把寄存器的内容复制到ALU(算数逻辑单元)进行算数运算。
- 跳转:执行指令更新指令寄存器的内容。
系统怎么运行hello.c程序
shell是一个命令行解释器,它等待你的输入,如果输入的第一个单词不是内置shell命令,shell会认为它是一个可执行文件。



当我们敲回车时,shell执行一系列命令加载可执行程序hello,把代码和数据从磁盘复制到主存。
执行hello程序的main函数里面的机器语言指令,把“hello world”从主存复制到寄存器,从寄存器复制到显示设备。
这个示例揭示了一个重要的问题,系统花费了大量的时间进行了信息的传递。
hello程序最初在磁盘上,当程序加载时复制到主存,程序执行时指令要复制到处理器。相似的字符串“hello world”开始在磁盘,然后被复制到主存,最后从主存复制到显示设备。从程序员的角度看,这些复制就是开销,系统设计这的主要目的就是使这些复制尽可能快的完成。针对这种差异,系统设计者采用了更小更快的存储设备,称为高速缓存存储器(简称为cache或者高速缓存)。

操作系统
操作系统看成是应用程序与硬件之间插入的一层软件。
两大基本功能:
- 防止硬件被失控的应用程序滥用。
- 向应用程序提供简单一致的机制来控制复杂的低级硬件设备。
操作系统通过几个基本的抽象(进程、虚拟内存、文件)来完成实现这两个功能。
进程:对处理器、主存和IO设备的抽象表示。
虚拟内存:对主存和磁盘和IO设备的抽象。
文件:对IO设备的抽象表示。
进程
进程是操作系统对一个正在运行的程序的一种抽象。
一个CPU并发的地执行多个进程,这是通过处理器在进程间切换实现的。操作系统这种交错执行的机制称谓“上下文切换”。
进程运行的所有状态信息称为“上下文”,单处理器只能处理一个进程,当操作系统进行进程转换时,它会保存当前进程的上下文,并恢复新进程的上下文,然后将控制权交给新进程。
hello程序执行时的上下文切换
最开始shell程序在执行,等待命令行输入。 shell通过一个系统调用执行我们的请求,系统调用将控制权传递给操作系统。操作系统保存shell的上下文,创建一个新的hello进程及其上下文,将控制权传给hello进程,hello进程结束后,操作系统恢复shell进程的上下文,并将控制权传递给它。
进程之间的上下文切换是由操作系统的内核管理的,内核是常住内存的操作系统代码部分。当应用程序需要操作系统的某些操作时,比如读写文件,他会执行特殊的系统调用命令,将控制权传递给内核,然后内核执行请求的操作并返回应用程序。内核不是一个独立的进程。它是系统管理全部进程所用代码和数据结构的集合。
线程
线程:是操作系统能够进行运算调度的最小单位。是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。同一进程中的多条线程将共享该进程中的全部系统资源,如虚拟地址空间等等。但同一进程中的多个线程有各自的调用栈,自己的寄存器环境,自己的线程本地存储。多线程之间较多进程之间更容易共享数据。
并发与并行
并发:在同一时间间隔内有两个或多个事件发生。一个处理机可以并发的执行程序。
并行:在同一时刻有两个或多个事件发生。多个处理机实现并行执行程序。
系统支持两个或者多个动作(Action)同时存在,那么这个系统就是一个并发系统。
系统支持两个或者多个动作同时执行,那么这个系统就是一个并行系统。
虚拟内存
虚拟内存是计算机系统内存管理的一种技术,它为每个进程提供了一个假象,即每个进程都是独立的使用内存,将内存视为一个非常大的字节数组。
其实每个进程看到的主存都是一样的,并且被分隔成多个物理内存碎片。虚拟内存技术是经过特殊的处理将内存(DRAM)、闪存、磁盘存储器、特殊硬件、操作系统软件结合起来,为程序提供一个看上去统一的字节数组。
文件
文件就是字节序列的容器,仅此而已。每一个IO设备,包括磁盘、键盘、显示器、甚至是网络,都可以看成是文件。系统中的所有输入输出都是通过使用一小组称为Unix I/O的系统函数调用读写文件来实现的。

浙公网安备 33010602011771号