操作系统(一)

引言

提前批面试被怼飞了,去实习前先给自己充充电,充实一下。从零开始学操作系统,有什么错误希望大家直接指出~

文章导读

  • 操作系统的启动
  • 操作系统与设备和程序交互(中断,IO,系统调用,异常)

一、操作系统的启动

计算机刚打开时,执行了什么指令?
会走pc=?,具体地址是由硬件设计者决定。

首先简单来了解一下操作系统启动的过程,以x86 PC为例:
1. x86 PC刚开机时,CPU处于实模式。
注:这种模式下能够直接访问硬件,没有硬件等级和保护。
2. 开机时,CS=0xFFFF,IP=0x0000
注:CS是段寄存器,IP是偏移。
3. 寻址0xFFFF0(ROM BIOS映射区),进入BIOS模式。
注:寻址=CS<<4+IP
4. 检查RAM,键盘,显示器,软硬件磁盘
5. 将磁盘0磁道0扇区读入0x7c00处(一个扇区的大小是512字节)。
注:0磁道0扇区就是操作系统的引导扇区。
6. 设置cs=0x07c0,ip=0x0000
注:引导扇区加载完后,加载setup扇区......

简单来说,就是:
1. BIOS加电自检,寻找显卡和执行BIOS。
2. 将bootloader加载到内存中。
3. bootloader找到硬盘的起始扇区,将操作系统代码和数据从硬盘读取到内存中。

注:对于操作系统的启动,这里做一个了解,我看的也有点懵逼呀。牵扯到的知识太多了,就点到为止了。

二、操作系统与设备和程序交互

首先得清楚与设备和程序交互的方式有哪些:

  • 面向外设:中断,IO
  • 面向应用程序:系统调用,异常

系统调用:应用程序主动向操作系统发出服务请求。
异常:非法指令或者其他坏的处理状态。
中断:来自于不同的硬件设备的计时器和网络的中断。

为什么不让应用程序直接访问外设?
1. 在计算机运行中,内核是被信任的第三方
2. 只有内核可以执行特权指令
3. 封装成接口,为了方便应用程序调用

2.1 中断的过程

硬件层面:设置中断标记。
1. 将内部、外部事件设置中断标记。
2. 产生中断事件的ID。
CPU根据中断标记产生中断号(中断事件ID),发送给操作系统。

软件层面
1. 保存当前处理状态。
2. 中断服务程序处理。
3. 清除中断标记。
4. 恢复之前保存的处理。

2.2 异常的过程

1. 产生异常编号。
2. 异常处理。
杀死产生异常的程序或重新执行异常指令。
3. 恢复现场。

2.3 系统调用的过程

1. 系统调用接口根据序号来维护表的索引。
2. 系统调用接口调用内核态中预期的系统调用,并返回系统调用的状态和其他任何返回值。
3. 用户不需要知道系统调用是怎么实现的,只要获取API,了解返回结果。大部分细节都隐藏在API中。

操作系统如何实现系统调用?
应用程序通过Library Code访问系统调用的接口;
触发用户态->内核态的转换,控制权从应用程序到操作系统;
sys_ 系统调用。

2.4 相关的开销

  • 建立中断,异常,系统调用号与对应服务进程映射关系的初始化开销。
  • 建立内核堆栈。
  • 验证参数。
  • 内核态映射到用户态的地址空间,更新页面映射权限。
  • 内核态独立地址空间。

这篇作为操作系统的热身篇,简单的介绍了操作系统的启动以及中断,系统调用,异常的原理,内容不多。
如果看得不过瘾,可以戳:操作系统(二)—内存管理

参考文章:操作系统第六篇【存储器管理】

感谢支持,喜欢我的文章可以关注我的知乎专栏~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值