【学习笔记】程序员的自我修炼一:温故而知新

前言:

     今天下定决心,坚持写博客的心,多加增强自己书写表达能力,刺激自己多加对技术的剖析。基于自己爱于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中的一些优化导致一些锁不起作用

原文地址:https://www.cnblogs.com/miner007/p/5618687.html