1、操作系统的启动

CPU加电后,执行BIOS(基本IO处理系统)。BIOS会进行硬件的自检和初始化,然后把加载程序(BootLoader)从磁盘上的引导扇区中加载到指定位置0x7c00。然后控制权交给加载程序,加载程序将操作系统的数据和代码加载到内存,然后把控制权交给操作系统。

2、系统调用、异常、中断

中断:

  • 硬件产生中断标记
  • 保存当前处理状态,保存现场
  • 根据中断,进行中断服务程序处理
  • 清除中断标记
  • 恢复之前保存的处理状态

异常:

  • 得到异常编号
  • 异常处理(杀死异常程序、重新执行异常指令)
  • 恢复现场

开销:

  • 切换内核态用户态时间上的开销
  • 建立中断/异常/系统调用号与对应服务例程映射关系的初始化
  • 建立内核堆栈
  • 验证应用程序的参数
  • 内核空间数据拷贝到用户空间的开销

3、内存分配算法

1.首次适配算法(First Fit):

空闲区按地址从低到高排序,找到第一个不小于请求空间的内存块,分割并分配出去。

优点:简单,快速

缺点:易产生外部碎片

2.最优适配算法(Best Fit):

按照空闲块的大小进行排序,找到一个最适合的空闲块,分割并分配出去。

优点:简单,当大部分分配是小尺寸时很有效

缺点:外部碎片,重分配慢

3.最差分配算法(Worst Fit):

按空闲块大小排序,每次找到最大的空闲块,分割并分配出去。

优点:快,分配的是中等尺寸效果很好

缺点:外部碎片,重分配慢,先破碎大的空闲块以致大分区无法被分配

4、连续内存分配中的碎片整理

压缩

实现:移动分配给程序的内存分区,以合并外部碎片。

条件:程序可以动态重定位(使用绝对地址移动后出错);压缩的时机,选择等待的进程。

开销:频繁地在内存进行拷贝,开销也会变大。

交换

实现:抢占等待的程序,回收他们的内存,把这些进程的数据等等放到外存。

开销:在内外存交换数据,磁盘的IO读写很慢,开销很大。还要考虑交换哪些程序。

参考文献:

操作系统_清华大学(向勇、陈渝)

最新文章

  1. 修改cdh5集群中主机节点IP或hostName
  2. Android使用Java Mail API发送邮件
  3. mssqlserver 分日志(日志文件过大)
  4. leetcode@ [2/43] Add Two Numbers / Multiply Strings(大整数运算)
  5. 【转】Android通过Wifi来调试你的应用
  6. Ubuntu_10.04下Hadoop-0.20.2集群配置手册
  7. MVC的TryUpdateModel
  8. 【Sort】Merge Sort归并排序
  9. Android开发学习之路--Activity之四种启动模式
  10. EL表达式 - 日常使用表达式记录
  11. 如何在.net 4.0下安装TLS1.2的支持
  12. day9面向对象,多线程2
  13. React基础概念
  14. Python中的序列操作
  15. 2017-2018-2 20165325 实验三《Java面向对象程序设计》实验报告
  16. Android View 阴影的总结
  17. LyX使用中的一些问题
  18. (转)Maven中的DependencyManagement和pluginmanagement
  19. Loadrunner之https协议录制回放报错如何解决?(九)
  20. elasticsearch(一) 之 elasticsearch初识

热门文章

  1. Mybatis执行流程学习之手写mybatis雏形
  2. 什么是Etcd,如何运维Etcd ?
  3. proxmox ve系统绑定上联外网出口bond双网卡
  4. proc/net/tcp中各项内容的含义
  5. tcp服务器
  6. JPEG解码——(3)文件头解析
  7. luoguP6754 [BalticOI 2013 Day1] Palindrome-Free Numbers
  8. Integer的十进制转二,八,十六进制
  9. python 拼接字
  10. C语言--指针数组大小