代码改变世界

操作系统这门课的学习中得到的思想启发

2010-12-14 23:17  Aga.J  阅读(768)  评论(0编辑  收藏  举报

1 抽象:是管理复杂性的一个关键,好的抽象可以将任务分为两个可管理的部分:
  1 有关抽象的定义和实现
  2 随时用这些抽象解决问题
  (这与程序设计中的“抽象”概念类似,使得对象的实现和接口分离)

2 如果某个事物的创建和撤销的代价过大,而且经常需要执行这类的操作,那么可以使用“标识为不可用”的方法来实现

3 进程调度算法:First Come First Serve , Shortest Job First , Shortest Remaining Time First , Round Robin

4 封装:没有存储器抽象的时候,直接访问物理内存,造成对物理内存依赖性大,对物理内存的操作细节需要了解。

5 发展倾向重复历史:微波炉上还是使用直接访问物理内存的方式,因为只允许一个进程的运行。

6 地址空间,为具体地址做一层映射,类似于网络地址的com地址空间

7 交换技术:将整个进程在内存和磁盘中交换出来进入,比较傻。而且会出现进程增长时的问题,这个问题可以通过双边栈来实现

8 位图技术:使用位图来记录“有”“无”的信息,节省的数据结构,但是寻找连续0段时会出现性能问题

9 链表技术:维护内存空闲段和分配段

10 自动化:纯手工的问题要学会用电脑去做,例如使用虚拟内存来解决原来的overlay的分覆盖问题,或者是yacc的自动生成文法

11 缓冲技术:在页面交换中为了实现快速分页,使用了性能战术,即缓冲经常访问的部分。web服务的服务器会把经常访问的web页面放在存储器的高速缓存中

12 多级页表:同样是一种分段的思想,避免了将全部页表放在内存中

13 倒排页表:实际内存中每个frame有一个表项,而不是每个虚页有一个表项,因为只有frame才是真正被映射到,如果每个虚页对应一个表项则会带来很多冗余的表项,减少冗余的战术

14 哈希访问:对于需要遍历或者顺序查找才能找到目标的,可以使用哈希函数来做映射。

15 圆周技术:队列首尾连接可以形成环。方便访问。

16 页面置换算法总结
    最优算法
    NRU算法-最近未使用
    FIFO算法-队列
    第二次机会算法-再入队
    时钟算法-环列
    LRU-最近最少使用
    NFU-最不经常使用
    老化算法-最不经常使用
    工作集算法-区域性算法
    工作集时钟算法-区域

17 写时复制:也就是减少了额外计算开销

18 使用块设备和字符设备来为IO设备建模,使得模型更具一般性,打下了软件具有设备无关性的基础:意味着为事物建模的重要性。

19 要求设备独立性,那就应该用一个统一的名称来访问设备,统一命名问题

20 运行时系统要考虑:同步异步问题,缓冲处理,共享独占问题!

21 针对接口编程:操作系统为能在运行时添加设备驱动程序,定义了一组驱动程序必须支持的函数,统一通用的接口使得操作系统对所有设备都可以通过统一的方式访问。这样增加新的驱动程序就变得十分容易,因为这是针对接口编程!

22 运行时绑定:对于每一种设备类型,os都定义了一组驱动程序必须支持的函数。驱动程序通常包含一张表格,这张表格有针对这些函数指向驱动程序自身的指针,当驱动程序装载时,操作系统记录下这张函数指针表的地址,当os需要调用一个函数是,就可以通过这张表格发出间接调用。这张函数指针表定义了驱动程序与操作系统其余部分之间的接口。

23 缓存技术,变种-循环缓存区,缺点性能

24 假脱机的应用:通过网络传输文件常常使用一个网络守护进程,要发送一个文件到某个地方,用户可以将文件放在一个网络假脱机目录下,稍后由网络守护进程取出并发送,这样就解决了某个进程占用了某个通信链路。

25 电梯算法的改进,即完成向上的服务处理后,回到最底,再重新向上接受服务,这种做法类似于将最底的请求作为最高请求上的相邻请求,其实也是一种环状的思想,很多有线性关系的问题都可以很容易转换为环状来处理。

26 死锁问题-资源分配和资源请求,使用有向图来建模,很容易的通过查找图内的有向环来判断是否有死锁。

有图的环检测(利用有向图来检测死锁):
    1 对图的每个节点N,将N作为起始点开始以下步骤(注意是每个)
    2 将L初始化为空表,清楚所有的有向边标记

    3 吧当前节点添加到L的尾部,检测是否在L中出现了两次,如果是则证明有环,算法结束
    4 从给定的节点开始,检测是否存在没有标记的,从该节点出发的有向边,如果有就执行5,没有就执行6
    5 随机选择一条没有标记的从该节点出发的有向边,标记他,然后沿着这条边周到当前节点,做步骤3
    6 如果这个节点时起始节点,那就表明无环,如果不是起始节点,就要移走这个节点并回到前一个节点,将它作为新的当前节点,然后执行第3步
    这个类似于树的深度优先遍历

27 检查点和回滚技术:这也是从一些错误中恢复到正常情况的思想

28 两阶段加锁技术:数据库也用到

29 网络通信中的死锁:信息丢失或者延迟,双方都在等待对方的消息到来,信息丢失使用了“超时”的技术来解决,如果是冗余信息的到来,就要在双方通信前进行协商,所以需要“通信协议”

30 抽象:
      操作系统为处理器建立进程的抽象概念
      为物理内存存储器建立虚拟地址空间的抽象概念
      为磁盘内存存储器建立文件的抽象概念

31 研究那些具有清晰,间接概念的老式系统和思想很重要,例如以前的连续分配块的文件实现方式,在现在看来是不可取的,因为它必须先指定文件大小,并不兼容大小变化的文件,而且可能会有零头,但是在CD-ROM和DVD中却得到了很好的应用

32 散列,缓存:又一次提到散列的技术,散列帮助我们不需要遍历所有元素而随机的存取某个元素,这种速度是相当快的,而缓存则是更加普遍的提供访问速度的方法。

33 日志文件系统---原子事务思想!!!!!!!!!

34 虚拟文件系统动态注册服务:加载文件系统时,必须要到VFS中进行注册,而注册的过程就是提高给VFS一个包含VFS所需要的函数地址的相对于本文件系统的映射的列表!!!这是一种很好的动态加载技术!!!!!