什么是POSIX标准
POSIX = Portable Operating System Interface POSIX定义了一系列最小的系统调用和库函数接口;所有号称兼容POSIX的UNIX/Linux版本都必须支持这些接口。 如果你的程序调用的系统接口都是POSIX定义的标准接口,那么它就可以在任意支持POSIX标准的*nix版本上编译后运行。
POSIX = Portable Operating System Interface POSIX定义了一系列最小的系统调用和库函数接口;所有号称兼容POSIX的UNIX/Linux版本都必须支持这些接口。 如果你的程序调用的系统接口都是POSIX定义的标准接口,那么它就可以在任意支持POSIX标准的*nix版本上编译后运行。
如果Semaphore这样实现,就可能导致spinlock: acquire(){ while(value <= 0) ; //no-op value–; } release(){ value++; } 当进程等待时,cpu会空转,也就是说进程会spin(自旋),导致CPU浪费。 所以应该改空转为阻塞,把cpu让给操作系统的scheduler. 恐龙书上介绍的实现为: acquire(){ value–; if(value < 0){ add this process to list; block(); } } release(){ value++; if(value <= 0){ remove a process P from list wakeup(P); } }
Race Condition: A situation where 1. several processes access and manipulate the same data concurrently 2.the outcome of the execution depends on the particular order in which the access takes place Critical Section: a segment of code that accesses shared resource(s) – code, not resource(s) itself If process p1 is executing in its critical section, then …
字符设备不能随机访问数据,而只能以流的方式顺序访问。用键盘打"abc"时,键盘驱动程序必须顺序地读入a, b, c. 键盘就是字符设备 。 块设备可以随机访问数据。 硬盘就是个例子,它可以移动磁头到任何位置来读取数据。
在抢占式多任务系统中(preemptive multitasking)中,调度程序可以强行挂起一个进程,让别的进程获得CPU. 在非抢占式多任务系统中(cooperative multitasking)中,除非进程自己主动停止运行,否则它会一直执行。
微内核设计中,功能被划分成一个个的“服务器”,这些服务器之间地址空间彼此独立,所以一个功能的崩溃不会影响其他功能。 但是微内核中的服务器之间只能通过IPC通信,效率低于直接函数调用。 linux没有使用微内核,它用的是单内核。功能模块之间可以直接进行函数调用,保证了较好的性能。 不过,它有些类似于微内核的优点:高度模块化、动态加载等等。
CPU与外设交互的基本过程: 那怎么判断数据是否已经准备好呢?具体有三种办法: 1. CPU主动轮询 2. 中断 (Interrupt-driven) 3. DMA机制
总线: 数据传送的公共通路。 CPU和主存之间的数据传输并没有用什么专门的一对一通道,而是用了总线。 跟以太网的广播式数据传送类似,CPU把数据丢到总线上,但只有主存会收到。 一台计算机中按不同的速度要求设置了多条总线: 1. CPU内部总线 2. 系统总线 3. I/O总线 总线的关键性能测标是“ 总线带宽”,即每秒可传输的字节数。它跟总线的位数和总线周期有关。
中断机制的步骤(以读取数据为例): 1. CPU向外设发出读取指令,然后继续执行主程序 2. 外设准备好后,向CPU提出中断请求 3. CPU暂停主程序并保留现场,然后调用相应的中断服务子程序(存储在操作系统中),执行I/O读取数据 4. 数据读入完毕后,回到主程序并恢复现场 说明: 1.CPU响应中断时可能还会关闭中断,表示暂不响应别的中断 2.有个术语叫“中断向量”,实际上就是中断号及其中断服务程序入口的地址。 中断号由CPU预先规定,操作系统在启动时会把相应中断服务程序安装到中断向量中,跟中断号对应起来。 3.中断不仅用于外设与系统的交互,也可以用于各种异常,比如被零除、越界访问内存等紧急事件。有的系统还用中断来实现虚拟内存分页(page fault),系统调用(软中断)等
主存(即内存条)的几个性能指标: 1.存取时间: 执行一次读写命令的时间 2.存取周期: 连续两次读操作所需的最小间隔 3.存储器带宽: 单位时间能够存取的字节数