1. 存储单位换算
1Byte = 8Bit
1KB(yte) = 1024Byte
1MB(yte) = 1024KB(yte)
1GB(yte) = 1024MB(yte)
1TB(yte) = 1024GB(yte)
2. 布线问题:
1)布线问题的解空间是一个图。
2)可以对方格阵列四周设置围墙,即增设标记的附加方格的预处理,使得算法简化对边界的判定
3)采用先入先出的队列作为活结点表,以终点b为扩展结点或活结点队列为空作为算法结束条件
3. 操作系统中FCB
FCB(File Control Block),文件控制块,存储文件在磁盘中的相关信息。
核心利用这种结构对文件实施各种管理。例如,按名存取文件时,先要找到对应的控制块,验证权限。仅当存取合法时,才能取得存放文件信息的盘块地址。
4. 解决死锁的具体办法
资源剥夺:允许一个进程强行剥夺其他进程所占有的系统资源。
撤销进程:是强行释放一个进程己占有的系统资源,与资源剥夺法同理,都是通过破坏死锁的“请求和保持”条件来解除死锁。
注:拒绝分配新资源只能维持死锁的现状,无法解除死锁。
5. 文件结构
6. 文件句柄
在文件I/O中,要从一个文件读取数据,应用程序首先要调用操作系统函数并传送文件名,并选一个到该文件的路径来打开文件。该函数取回一个顺序号,即文件句柄(file handle),该文件句柄对于打开的文件是唯一的识别依据。要从文件中读取一块数据,应用程序需要调用函数ReadFile,并将文件句柄在内存中的地址和要拷贝的字节数传送给操作系统。当完成任务后,再通过调用系统函数来关闭该文件。
7. 在使用锁保证线程安全时,可能出现活跃度失败情况
(多线程除了死锁之外遇到最多的就是活跃度问题了)
在使用锁保证线程安全时可能会出现活跃度失败的情况,主要包括 饥饿、丢失信号、和活锁、死锁 等。
饥饿:指线程需要访问的资源被永久拒绝 ,以至于不能再继续进行。解决饥饿问题需要平衡线程对资源的竞争,如线程的优先级、任务的权重、执行的周期等。
活锁:指线程虽然没有被阻塞,但由于某种条件不满足,一直尝试重试却始终失败。解决活锁问题需要对重试机制引入一些随机性。例如如果检测到冲突,那么就暂停随机的一定时间进行重试,这会大大减少碰撞的可能性。
8. 虚存最大容量
虚存的最大容量=min{内存+辅存,逻辑地址(地址寄存器)}。
9. 位图表示法
位图表示法:只存该无符号整数是否存在,不存具体值,只需1位(bit)即可表示。
例如,对于65536个不重复的整数,最少需要65536位来表示,65536 bit = (216 / 23)byte = 213 byte = 8k byte.
10. 关于线程调度
1)sleep()方法强制使当前线程休眠,释放CPU资源,以便使得其他所有线程有机会运行。
2)yield()方法使得当前的线程让出CPU的使用权,以使得比该线程优先级相同或更高的线程有机会运行。该线程在让出CPU使用权之后可能再次被选中,因此yield()方法可能会不起作用。
3)具有相同优先级的多个线程的调度不一定是分时的。如,java虚拟机中如果多个线程优先级相同,则会随机选择一个线程占用CPU,处于运行状态的线程会一直运行,直至它不得不放弃CPU为止。
11. 硬链接
硬链接(hard link, 也称链接)就是一个文件的一个或多个文件名。硬链接是不可以跨越文件系统的,硬链接实际上是为文件建一个别名,链接文件和原文件实际上是同一个文件。所以硬链接文件的i节点同被链接文件的i节点相同。而软连接,是新建立一个文件,软链接可以跨文件系统。
12. 进程和线程
进程是程序的一次执行,是系统进行资源分配和调度的独立单位,即进程是拥有资源的最小单位。
线程是程序执行流的最小单元,是调度和分派的基本单位。线程不拥有资源。
总结:进程是cpu资源分配的最小单位,线程是cpu调度的最小单位。一个进程可以有多个线程,多个线程也可以并发执行。
进程间通信的方式:信号、信号量、消息队列、共享内存、管道、socket。 线程同步的方式:事件、互斥量、信号量。
进程调度策略:FCFS(先来先服务),优先级,时间片轮转,多级反馈。
进程的三种基本状态:就绪状态、执行状态、阻塞状态。进程状态详见链接。
进程的个体间是完全独立的,而线程间是彼此依存的。多进程环境中,任何一个进程的终止,不会影响到其他进程。而多线程环境中,父线程终止,全部子线程被迫终止(没有了资源)。而任何一个子线程终止一般不会影响其他线程,除非子线程执行了exit()系统调用。任何一个子线程执行exit(),全部线程同时灭亡。
13. 同步通信与异步通信
1)同步通信要求接收端时钟频率和发送端时钟频率一致,发送端发送连续的比特流;异步通信时不要求接收端时钟和发送端时钟同步,发送端发送完一个字节后,可经过任意长的时间间隔再发送下一个字节。
2)同步通信效率高;异步通信效率较低。
3)同步通信可用于点对多点;异步通信只适用于点对点。
14. 死锁
在两个或者多个并发进程中,如果每个进程持有某种资源而又等待其它进程释放它或它们现在保持着的资源,在未改变这种状态之前都不能向前推进,称这一组进程产生了死锁。通俗的讲就是两个或多个进程无限期的阻塞、相互等待的一种状态。
死锁产生的四个条件(有一个条件不成立,则不会产生死锁):互斥条件、请求与保持条件、循环等待条件、不剥夺条件。 解决死锁的基本方法:预防死锁、避免死锁、检测死锁、解除死锁。
15. 分页和分段
1)段是信息的逻辑单位,它是根据用户的需要划分的,因此段对用户是可见的 ;页是信息的物理单位,是为了管理主存的方便而划分的,对用户是透明的。
2)段的大小不固定,有它所完成的功能决定;页大大小固定,由系统决定。
3)段向用户提供二维地址空间;页向用户提供的是一维地址空间。
16. 操作系统执行可执行程序时,内存分配是怎样的?
一个由C/C++编译的程序占用的内存分为以下几个部分:
1)栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2)堆区(heap):一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。
3)全局区(静态区)(static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 程序结束后有系统释放。
4)文字常量区:常量字符串就是放在这里的。程序结束后由系统释放。
5)程序代码区(text):存放函数体的二进制代码。
17. Windows管理内存的方法
Windows提供了3种方法来进行内存管理:
1)虚拟内存,最适合用来管理大型对象或者结构数组 。
2)内存映射文件,最适合用来管理大型数据流(通常来自文件)以及在单个计算机上运行多个进程之间共享数据 。
3)内存堆栈,最适合用来管理大量的小对象。
18. 操作系统的主要功能
操作系统的主要功能:处理机管理(对进程的管理),存储器管理,设备管理,文件管理。此外,还要向用户提供方便的用户接口。
19. Windows用注册表存储系统和应用程序的设置信息。(注册表Registry)