1.1南北桥
为了协调CPU、内存和高速的图形设备,设计了高速北桥芯片;同时为了协调磁盘、USB、键盘等低速设备,设计了南桥低速芯片。现代计算机北桥已集成到CPU内部,南桥一般指现在的芯片组,新名称为PCH(Platform Controller Hub)。
北桥:适配高速设备。北桥芯片则主要是集成了内存控制器、PCI-E控制器,显卡。
南桥:适配低速设备,并汇聚数据接入北桥。南桥芯片主要集成了USB控制器,磁盘控制器这类与输入、输出相关的控制器,统称为I/O控制器。
1.2SMP与多核
SMP:对称多处理器,每个CPU在系统中所处的地位和发挥的功能都一样。
多核处理器:将多个处理器合并在一起打包,这些处理器间共享缓存部件,只保留多个核心。
1.3计算机软件体系结构
中间层:除了硬件和应用程序,其它都是中间层,每个中间层都是对它下面那层的包装和扩展。
接口关系:应用程序接口的提供者是运行库,什么样的运行库提供什么样的API;运行库使用操作系统提供的系统调用接口,系统调用接口在实现中往往以软件中断的方式提供,如Linux中用0x80号中断作为系统调用接口;操作系统内核是硬件接口的使用者,驱动程序决定如何操作硬件。
1.4操作系统
操作系统功能:提供抽象的接口、管理硬件资源。
分段:解决了地址隔离(判断非法访问则拒绝地址请求,并报告给操作系统或监控程序进行处理)和程序运行的地址不确定问题(无论分配到物理地址的那个区域,均不需关心物理地址的变化)。
分页:粒度更小的内存分割和映射方法,是的程序局部性原理充分利用,解决了内存不足时大量数据换入换出内存导致效率低问题。
1.5线程
线程组成:线程ID、当前指令指针(PC)、寄存器集合和堆栈,多线程可互不干扰的并发执行并共享进程的全局变量和堆数据。
线程访问权限:私有地址空间包括栈、线程局部存储、寄存器,线程共享全局变量、堆、静态变量、程序代码、打开的文件。
线程状态切换:
线程优先级改变的三种方式:用户指定优先级、根据进入等待状态的频繁程度提升或降低优先级、长时间得不到执行而被提升优先级。
Windows 、Linux 线程和进程:Windows 使用CreateProcess 和 CreateThread 来创建进程和线程;Linux并不存在真正意义上的线程,Linux 下不同任务通过选择共享内存空间的方式成为线程。fork并不复制原任务的内存空间,而是和原任务一起共享写时复制(两个任务可以同时自由地读取内存,任意任务试图对内存修改时,内存复制一份提供给修改方单独使用,以免影响其它任务使用)的内存空间。
同步与锁:将各线程对同一个数据的访问同步,即一个线程访问数据未结束时,其它线程不得对同一个数据进行访问。同步的方法包括锁(二元信号量、信号量等)、互斥量、临界区、读写锁和条件变量等,二元信号量适合于只能被唯一一个线程独占访问的资源;信号量允许多个线程并发的访问资源。互斥量与二元信号类似,但信号量在整个系统可被任意线程获取并释放,而互斥量则要求那个线程获取则那个线程负责释放。临界区作用范围仅限于本进程,其它进程无法获取该锁,而互斥量和信号量在系统任何进程都可见。读写锁解决了上述同步方式对于读取频繁而偶尔写入带来的低效问题,它有共享和独占两种获取方式,锁处于自由状态时可以任一种方式获取锁,共享时其它线程以共享方式获取锁仍会成功,独占时将组织任何其它线程获取该锁。条件变量类似于栅栏,支持等待和唤醒操作,它可以让许多线程一起等待某个事件的发生,当事件发生(唤醒)时,所有线程可以一起恢复执行。
可重入与线程安全:重入表示一个函数没执行完由于外部因素或内部调用又一次进入该函数执行,包括多线程同时执行这个函数、函数递归调用自生两种情况。可重入表示该函数被重入之后不会产生任何不良后果,因此其具备以下特点:
防止过渡优化:编译器优化的时候可能为了效率而将寄存器的值过段事件写回或交换毫不相干的两条相邻指令的执行顺序,进而引发线程安全问题,通常采用volatile关键字阻止过渡优化,volatile基本可以做到两件事:
volatile无法做到避免交换两条相邻指令的执行,因CPU存在动态调度,可能交换相邻指令的执行顺序,可采用barrier指令组织CPU将该指令之前(后)的指令换到barrier 之后(前),如下保证对象构造在barrier执行之前完成:
三种线程模型:用户实际使用的线程并不是内核线程,而是存在于用户态的用户线程,用户态线程并不一定在操作系统内核里对应同等数量的内核线程。一对一模型,一个用户使用的线程唯一对应一个内核使用的线程(反过来不一定,因内核线程可能部分空闲),该模型缺点是系统内核线程数量有限,因此用户线程数量会受到限制,此外上下文切换开销大;多对一模型,多个用户线程映射到一个内核线程,线程间切换由用户态代码进行,切换速度快,但若一个用户线程阻塞,所有线程都将无法执行,且处理器数量的增多对一对一模型的线程性能无明显帮助;多对多模型,将多个用户线程映射到少数但不止一个内核线程上,结合了其它两种模型的优点。
标签:绪论,用户,信号量,程序员,修养,线程,内核,执行,内存 From: https://blog.51cto.com/u_16063698/6181053