程序员的自我修养——第一章

上个星期在周会中,一位学长推荐了这本书,初学者.


Any problem in computer science can be solved by another layer of indirection

计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决



 一、万变不离其宗

1、计算机最重要的三部分:中央处理器CPU、内存、I/O控制芯片;

2、早期:CPU与内存直接连接在同一总线,为协调IO设备与总线之间的速度及CPU与IO设备通信,每个设备会有一个人相应的IO控制器————CPU核心频率上升,内存速度跟不上,产生与内存频率一致的系统总线,而CPU采用倍频方式与系统总线通信————图形化操作系统普及,设计出北桥芯片、南桥芯片——PCI/ISA南北桥设计的硬件架构;

二、SMP(symmetrical multi-processing)与多核

1、CPU频率从j几十KHz到现在的4GHz,提高了数十万倍,但自2004,摩尔定律似乎失效,CPU频率没有质的提高,制造CPU工艺方面已经达到物理极限——从而增加CPU数量提高速度——对称多处理器(SMP),但速度提高与CPU数量不成正比,eg:一个女人10月生一个孩子,但十个女人一个月生不了一个孩子;

2、多处理器非常有用的应用:大型的数据库、网络服务器(它们要同时处理大量的请求,且这些请求大多相互独立),即应用场合为商用服务器和需要处理大量计算的环境。由于个人电脑使用多处理器成本高、利用率低————多核处理器(multi-core processing)

三、系统软件

1、系统软件可分为两块:一为平台性的,如操作系统内核、驱动程序、运行库及数以千计的系统工具;二为用于程序开发的,如编译器、汇编器、链接器等开发工具与开发库

**2、计算机系统软件整个体系结构从上到下都是按照严格的层次结构设计的——层与层之间相互通信的协议为接口(interface),——在软件体系中,应用程序在最上层,如浏览器、email、多媒体播放器、图片浏览器。从层次上看,开发工具与应用程序属于同一层,因为它们使用一个接口—API(应用程序编程接口),其提供者为运行库

3、硬件规格

四、操作系统

1、CPU

早期的多道程序——分时系统——多任务系统:所有应用程序都以进程的方式运行、抢占式

2、设备驱动

成熟的操作系统出现后,硬件逐渐被抽象成了一种概念,硬件的访问形式与普通的文件形式一样,繁琐的硬件细节由/硬件驱动程序/完成

附:硬盘结构

3、内存

问题:如何将计算机上有限的物理内存分配给多个程序使用

障碍:(1)、地址空间不隔离;(2)、内存使用效率低,由于没有内存管理机制,需要执行一个程序时,监控程序就将整个程序装入内存;(3)、程序运行地址不确定

解决:增加中间层——把程序地址看作一种|虚拟地址|,然后通过映射的方法,将虚拟地址转化为实际物理地址;以达到地址空间隔离的效果

4、从分段到分页(不太理解,分页?)


五、线程(thread)

一个标准的线程由线程ID、当前指令指针、寄存器集合与堆栈组成

1、线程访问权限:栈、线程局部存储、寄存器;

2、线程调度与优先级 : 线程状态(运行、就绪、等待)、优先级调度与轮转法;

3、可抢占线程与不可抢占线程;

4、线程安全:

(1)竞争与原子操作:多线程同时访问一个共享数据为竞争、单指令操作为原子操作;原子操作指令简单方便,但局限性大引出:锁;

(2)同步与锁:为避免竞争产生的后果,需要对各个线程进行同步(synchronization);同步方法为锁(Lock)

概念:二元信号量、互斥量、临界区、读写锁、条件变量(理解吃力);

(3)可重入(Reentrant)与线程安全

  (4)   过度优化

5、多线程内部情况

(1)一对一模型

(2)多对一模型

(3)多对多模型(为解释的为暂未理解的知识)

猜你喜欢

转载自blog.csdn.net/qq_40783693/article/details/80386145