空循环和睡眠的区别
空循环时进程仍占用cpu; 睡眠时则会让出cpu,让别的进程干活。
操作系统的两种基本职能
摘自Tanenbaum《操作系统设计与实现》 操作系统的两种基本职能: 1. 为程序员屏蔽机器语音、硬件细节的复杂性 2. 资源管理,比如进程调度
用户线程 V.S. 内核线程
线程有两种实现方式: 1. 内核直接支持,称为内核线程 2. 用户态的程序自己实现,称为用户线程 ================================================================ 用户线程在用户态运行,所以创建、切换都比内核线程效率高 但是,内核不知道用户线程的存在,它只知道用户进程;当进程中的一个线程被阻塞时,会导致整个进程被阻塞。 内核线程就没有这个问题。 同理,由于一个进程中的多个用户线程在内核里只对应一个执行绪,所以这种机制无法利用多处理器的能力。 ============================================================================= 两种线程机制并不是互斥的。在有的系统中,可以把用户线程按1:1或m:n映射到内核线程上. 用户线程的典型例子是POSIX的Pthread, 而很多UNIX都支持内核线程。 Linux中没有线程。你可以通过clone()来创建一轻量的子进程,这个子进程并不会复制父进程的所有数据,而是通过一个指针指向父进程的数据结构,从而与父进程共享资源和地址空间。 clone()一般与pthread联合使用,即用phtread作为API,clone()作为实现。 ============================================================================= Linux从内核2.6开始使用NPTL (Native POSIX Thread Library)支持,但这时线程本质上还轻量级进程。 Java里的线程是由JVM来管理的,它如何对应到操作系统的线程是由JVM的实现来确定的。Linux 2.6上的HotSpot使用了NPTL机制,JVM线程跟内核轻量级进程有一一对应的关系。
进程之间切换
PCB=进程控制块
线程的结构
一个多线程的进程 由于多个线程共享部分数据结构,所以在进程内创建新线程或者上下文切换比创建、切换进程要快得多
计算机组成结构图
运算器和控制器的职责分工:
指令周期
指令周期(Instruction Cycle): 取出一条指令并执行的时间。一个指令周期由若干个 CPU周期组成(至少两个,一个用于取指,一个用于执行) CPU周期: 由若干个 时钟周期(Clock Cycle)组成 时钟频率(Clock Rate): 时钟周期的倒数 . 时钟频率就是 主频
指令集
指令集: 一台机器能够理解的所有指令的集合,如ADD, MOV等 各平台有自己的指令集。指令集的不同会影响系统软件的兼容性。 指令 = 操作码OP + 数据地址码A 操作码实际上也是用0,1编码的,因为机器语言只认0,1 汇编语言是机器语言的可读版,比如,它可能用ADD来代表001
外设适配器
适配器:用于在CPU和低速外设之间进行速度匹配和同步,又可称作I/O接口。 1.控制外围设备 2.在速度上起到缓冲作用 3.提供状态信息 4.数据转换(串-并 e.g.)和修改 5.发出中断 在系统中的位置: