1、操作系统的启动

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

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

中断:

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

异常:

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

开销:

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

3、内存分配算法

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

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

优点:简单,快速

缺点:易产生外部碎片

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

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

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

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

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

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

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

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

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

压缩

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

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

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

交换

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

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

参考文献:

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

操作系统 part4的更多相关文章

  1. 秋招C++面试相关总结索引

    C++相关 C++ part1 C++ part2 C++ part3 C++ part4 C++ part5 C++ part6 C++ part6.5 C++ part7 C++ part8 C+ ...

  2. [自制操作系统] BMP格式文件读取&图形界面系统框架/应用接口设计

    本文将介绍在本人JOS中实现的简单图形界面应用程序接口,应用程序启动器,以及一些利用了图形界面的示例应用程序. 本文主要涉及以下部分: 内核/用户RW/RW调色板framebuffer共享区域 8bi ...

  3. 操作系统篇-调用门与特权级(CPL、DPL和RPL)

    || 版权声明:本文为博主原创文章,未经博主允许不得转载. 一.前言 在前两篇文章(<操作系统篇-浅谈实模式与保护模式>和<操作系统篇-分段机制与GDT|LDT>)中,我们提到 ...

  4. 操作系统篇-分段机制与GDT|LDT

    || 版权声明:本文为博主原创文章,未经博主允许不得转载. 一.前言     在<操作系统篇-浅谈实模式与保护模式>中提到了两种模式,我们说在操作系统中,其实大部分时间是待在保护模式中的. ...

  5. 操作系统篇-hello world(免系统运行程序)

     || 版权声明:本文为博主原创文章,未经博主允许不得转载. 一.前言     今天起开始分享关于操作系统的相关知识,本人也是菜鸟一个,正处于学习阶段,这整个操作系统篇也是我边学习边总结的一些结果,希 ...

  6. Linux实战教学笔记03:操作系统发展历程及系统版本选择

    标签(空格分隔): Linux实战教学笔记-陈思齐 第1章 Linux简介 1.1 什么是操作系统? 简单讲:操作系统就是一个人与计算机硬件的中介. 操作系统,英文名称Operating System ...

  7. ucos实时操作系统学习笔记——任务间通信(消息)

    ucos另一种任务间通信的机制是消息(mbox),个人感觉是它是queue中只有一个信息的特殊情况,从代码中可以很清楚的看到,因为之前有关于queue的学习笔记,所以一并讲一下mbox.为什么有了qu ...

  8. ucos实时操作系统学习笔记——任务间通信(队列)

    ucos操作系统中的queue机制同样使用了event机制来实现,其实和前面的sem,mutex实现类似,所不同的是对sem而言,任务想获得信号量,对mutex而言,任务想获得的是互斥锁.任务间通信的 ...

  9. ucos实时操作系统学习笔记——任务间通信(信号量)

    ucos实时操作系统的任务间通信有好多种,本人主要学习了sem, mutex, queue, messagebox这四种.系统内核代码中,这几种任务间通信机制的实现机制相似,接下来记录一下本人对核心代 ...

随机推荐

  1. Mybatis解决字段与属性不匹配的问题、链表查询、嵌套查询、#{}和${}的区别

    1.使用接口结合xml映射文件 创建一个接口,该接口要和映射文件匹配(接口中方法名要和映射文件中的id相同) 映射文件中命名空间要和接口全类名相同 测试: 创建一个与src同级的源文件夹resourc ...

  2. python的Counter类

    python的Counter类 Counter 集成于 dict 类,因此也可以使用字典的方法,此类返回一个以元素为 key .元素个数为 value 的 Counter 对象集合 from coll ...

  3. uni-app开发经验分享六:页面跳转及提示框

    在我们开发的uni-app的过程中,页面跳转及提示框往往是我们做数据交互及结果反馈所要使用的功能,这里分享下我收集的一些方法及看法. 一:页面跳转 事件跳转 :指通过tap等事件来实现页面的跳转,跳转 ...

  4. windows中使用django时报错:A server error occurred. Please contact the administrator.

    这是因为在视图函数中使用了get函数,获取了不存在的数据例如:数据库中不存在一条name为hello1的数据,使用如下语句访问message = Message.objects.get(name='h ...

  5. 解决 win10 无法安装VS2019,visual studio installer下载进度始终为0

    解决 win10 无法安装VS2019,visual studio installer下载进度始终为0 目录 解决 win10 无法安装VS2019,visual studio installer下载 ...

  6. 树莓派zero 使用usb串口连接

    使用minicom连接bash$ lsusbBus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hubBus 001 Device 0 ...

  7. 理想的DevOp流程怎么做?看看Slack的代码部署实践 原创 Michael Deng 高可用架构 今天

    理想的DevOp流程怎么做?看看Slack的代码部署实践 原创 Michael Deng  高可用架构  今天

  8. 关于js中each()使用return不能终止循环

    Jquery的each里面用return false代替break:return ture代替continue $(xx).each(function() { if(xx){ return false ...

  9. Nginx上安装SSL证书

    准备 参考 :链接 下载的Nginx证书压缩文件解压后包含: .pem:证书文件.PEM文件的扩展名为CRT格式. .key:证书密钥文件.申请证书时如果未选择自动创建CRS,则下载的证书文件压缩包中 ...

  10. 使用Docker部署监控系统,Prometheus,Grafana,监控服务器信息及Mysql

    使用Docker部署监控系统,Prometheus,Grafana,监控服务器信息及Mysql 一.docker部署prometheus监控系统 1.1 配置安装环境 1.1.1 安装promethe ...