前言:
今天下定决心,坚持写博客的心,多加增强自己书写表达能力,刺激自己多加对技术的剖析。基于自己爱于c++的东西,很早就想知道c++的编译器方面深度的东西,此系列主要记录对“程序员的自我修养”书籍的学习。通过此书增强对编译器的了解。每周周末更新这部分的内容,坚持一周一章,若内容多久拆分多章,少则合并。
ps:坚持一颗学习的心,丰富自己的知识,以程序为出发点,慢慢挖掘美妙的世界,享受生命。
关键词:
对称多处理器(SMP),多核,接口,多道程序,分时系统,多任务系统,进程,抢占,驱动程序,I/O,虚拟地址,隔离,分段,分页,线程,调度,写时复用,原子操作,锁,同步,过渡优化,
一:计算机系统
1:计算机核心部件:CPU,内存,I/O控制芯片
2:系统架构的发展:简单总线布局---->南北桥的总线布局(CPU,I/O设备,内存的访问速率不同导致)
南桥:磁盘,USB等设备连接到南桥(ISA总线结构);北桥:图像处理设备(3D)(PCI总线)
内存:内存频率调制和总线频率一致(南桥的总线)
CPU:频率过高,则采取倍频方式
3:SMP表示多个CPU处理,真正的并发,多核,是指多个CPU核共用一个高端的缓存部件打包一起
4:计算机软件的系统结构:硬件--->操作系统内核----->运行库----->应用软件/开发软件
5:层次设计,利用接口联系,下层是接口提供者,上层是接口使用者。
6:软件中断:利用类似硬件中断,硬件中断使用电平变化来触发,而软件中断是通过发送指令来触发,将用户态切换成管理者,将调用系统提供的接口函数。
第二:三大部件的设计
1:CPU
CPU经历过,单一程序运行,多道程序,分时系统,多任务系统。多道程序是指多个程序可以同时运行(基于监视系统,不让CPU空闲,等待状态的程序,让出CPU,供给其他程序运行);分时系统:协作模式,即使程序不处于等待,也主动让出CPU,额外加了个时间片的东西(轮流上CPU);多任务系统:设计目的是防止因为某个程序死循环导致死机,于是,设计出一个东西,它的权限比操作系统需要低一级,也就是常说的进程,将程序分割多个进程,若是某个进程耗时很大,系统可以杀死它,而不会导致机器死机,另外不管,其他程序的进程也不会受影响。
2:IO
复杂的对设备访问,交给操作系统,操作系统与硬件打交道,完成接口,以供应用程序简单操作,比如库函数中的read只是读取磁盘的数据,不需要关心如何去读,对其是透明的。IO设备驱动程序,此部分是操作系统的一部分,具有操作系统的特权,但是它又独立于操作系统,以便其灵活性
3:内存
充分利用内存,将物理地址,进行虚拟化。也就是所谓的虚拟地址。每个程序的地址都是从0开始,但是映射到物理地址时,就不是了。这样开发者不需要关系实际地址位置,这样,这些复杂的映射关系就有操作系统完成。
分段:将程序地址空间,通过映射到物理地址空间中,所占的部分就是为一段;分页:为了精细化管理分段,就采取分页,也就是说程序的内存变成了最小单位为页的空间,这样做会使得空间更能有效利用。
第三:线程
1:运行---->就绪----->等待,线程的三种状态,这样使得线程能够并行效果的执行。
2:线程不通与进程,属于本身的资源少,易于切换,消耗小;方便调度,由此也带来了调度的复杂性
3:线程安全解决措施:
锁:二元信号,多元信号(松,可以被其他线程释放);互斥量(只能自己释放锁);临界区(严,必须是同一个进程里面的,获取锁);读写锁(共享方式,独享方式);条件变量(让同等待同一条,批量启动线程)
4:过渡优化,是指编译器优化,以及CPU中的一些优化导致一些锁不起作用