一、计算机系统的回顾

指令集

存储在CPU内部,对CPU运算进行指导和优化的指令集合。拥有这些指令集,CPU就可以更高效地运行。例如:x86指令集。
计算机就是指挥机器工作的指示和命令,程序就是一系列按一定顺序排列的指令,执行程序的过程就是计算机的工作过程。一台计算机中的所有指令的集合,称作指令集。程序员用各种语言编写的程序要翻译(编译或解释)成以指令形式表示的机器语言之后,才能在计算机上运行。计算机硬件完成各条指令所规定的操作,并保证按程序所规定的顺序执行指令,所以指令系统反映了计算机的基本功能,是硬件设计人员和程序员都能见到的机器的主要属性。

计算机硬件结构

image.png

高速的北桥:速度非常高,主要负责CPU和内存、显卡这些部件的数据传送。现在有些主板已经没有北桥了,因为芯片厂商已经把北桥所负责的功能直接集成到CPU中了。
低速的南桥:主要负责I/O设备、外部存储设备以及BIOS之间的通信。
FSB总线:即前端总线(Front Side Bus),CPU和北桥之间的桥梁,CPU和北桥传递的所有数据必须经过FSB总线,可以这么说FSB总线的频率直接影响到CPU访问内存的速度。
PCI总线:PCI总线是一种高性能局部总线,其不受CPU限制,构成了CPU和外设之间的高速通道。比如现在的显卡一般都是用的PCI插槽,PCI总线传输速度快,能够很好地让显卡和CPU进行数据交换。

SMP与多核

原因:在制造CPU的工艺方面已经达到了物理极限,除非再有本质的突破,否则CPU的频率会一直被目前4GHz的“天花板”限制。(主频和实际的运算速度存在一定的关系,但并不是一个简单的线性关系,但提高主频对于提高CPU运算速度至关重要。)
SMP(Symmetrical Multi-Processing):对称多处理器,简单地讲就是每个CPU在系统所处的地位和所发挥的功能都是一样的,是相互对称的。理论上讲,速度的提高与CPU的数量成正比,但实际并非如此,因为我们的程序并不是都能分解成若干个完全不相干的子问题。当然在同时处理大量请求的时候,像大型数据库和网络服务器上是很有用的。
多处理器:SMP的简化版,共享比较昂贵的缓存部分,只保留多个核心。

CPU、存储器和I/O设备

不要让CPU打盹

多道程序(Multiprogramming):当某个程序暂时无需使用CPU时,监控程序就把另外正在等待CPU资源的程序启动,使得CPU能够充分地利用起来。
缺点:调度策略太粗糙,程序之间不分轻重缓急。
分时系统(Time-Sharing System):每个程序运行一段时间后都主动让出CPU。
缺点:任何一个程序死循环会导致系统死机。(这里存疑,可能是跑不到系统调用了)
多任务(Multi-tasking):操作系统接管所有硬件资源,并且本身处在一个受硬件保护的级别。所有的应用程序都以进程的方式运行在比操作系统权限低的级别,每个进程有自己独立的地址空间,相互隔离。CPU由操作系统一分配,如果运行超过了一定时间,操作系统会停止该进程,将CPU资源分配给其他进程。如果分配的时间很短,就能快速地切换。目前几乎所有的操作系统都采用这种方式。

I/O设备

这里提一下文件系统,文件系统管理着硬盘中文件的存储方式。一个硬盘往往有多个盘面,盘面分两面,每面安装同心圆划分为若干磁道。每个磁道划分为多个扇区,每个扇区一般为512字节。但是我们可以想象,同心圆的周长不一样,如果每个磁道都拥有相同数量的扇区,那么越外面就越稀,这样浪费空间;如果数量不一样,计算起来又十分麻烦。现在的硬盘使用一种叫LBA的方式解决以上问题,即整个硬盘中所有的扇区从0开始编号,一直到最后一个扇区,这个扇区编号叫逻辑扇区号。

内存不够怎么办

早期的程序直接运行在物理内存上,除了物理内存的大小限制以外,还有以下三个问题:

  1. 地址空间不隔离:程序直接访问物理地址,所使用的内存空间不是相互隔离的,可以修改到其他程序的数据。
  2. 内存使用效率低:多个程序一起运行,内存不足的时候要不停的换入换出大量数据。
  3. 程序运行的地址不确定:程序每次装入运行时,都需要分配一块足够大的空闲区域,区域位置不确定,给程序编写造成了麻烦,这涉及到程序的重定位问题。
    解决的思路是增加中间层。计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决,这就是虚拟地址的由来与用处,通过虚拟地址映射到物理地址的过程,达到了空间隔离的效果。

线程

线程是程序执行流的最小单元,多线程可以避免程序的卡顿。
线程可以访问进程内存里的所有数据,甚至包括别的线程的堆栈(知道堆栈地址),它也有自己的私有存储空间:

  • 栈(尽管可以被其他线程访问,一般还是认为是私有的)
  • 线程局部存储(Thread Local Storage,TLS),容量很小。
  • 寄存器,寄存器是执行流的基本数据,因此为线程私有。

信号量:初始值为N的信号量允许N个线程并发访问,线程获取信号量后,N减一,释放N+1,如果信号量小于0,获取的线程线程进入等待状态,待其他线程释放后再唤醒。
互斥量:和二元信号量类似(N=1),不同的是,信号量可以被任意线程获取和释放,互斥量要求谁获取,谁释放。
临界区:与以上两种的区别在于,临界区的作用范围仅限于本进程,其他进程无法获取该锁。
读写锁:以上三种对于读取频繁,偶尔写入的情况比较低效,读写锁可以避免这个问题。读写锁有两种获取方式,共享和独占。自由锁可以被任意进程任意方式获取,并置为对应状态;共享锁能被任意进程以共享方式获取,但以独占方式的话,需要等待其他所有线程释放;独占锁组织任何线程获取。

过度优化

  1. 编译器为了提高速度,将变量缓存到寄存器而不写回。
  2. 编译器的动态调度,可能交换相邻指令的执行顺序。
  3. CPU的动态调度, 可能交换相邻指令的执行顺序。

1和2可以通过volatile关键字阻止过度优化,3不存在平台无关的指令,不同的CPU提供的指令名称不同。

API的提供者是运行库,什么样的运行库提供什么样的API,最常见的32位Windows提供的API叫Win32。

运行库使用操作系统提供的系统调用接口。

操作系统内核层是硬件接口的使用者,而硬件是接口的提供者。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容