操作系统基础学习(一)初识os

操作系统是什么?

操作系统(Operating Systems)是一个复杂的软件,因此很难给它下一个精确的、完整的定义。
但是可以从功能和结构上定义。
功能上:(从对上和对下的角度来考虑)

  1. 对上,也就是在用用户角度上:
    操作系统是一个控制软件。

它可以管理应用程序,为应用程序提供各种各样的服务(IO服务,声卡服务)。

杀死应用程序。

  1. 对下,对操作系统管理的东西来说,它是一个资源分配的分配器。

协调好cpu、内存、磁盘、外设等系统资源的分配,使计算机内部协调有序的工作。
将cpu抽象(虚拟化)成进程、磁盘抽象成文件、内存抽象成地址空间供应用程序使用

操作系统的层次结构

  1. 硬件之上 应用程序之下 有承上启下的作用。
    它是中间层次的软件。

  2. 在软件的层次上,它是一个系统软件。

  3. 面向应用程序时,它提供了一个接口,把它称为shell(外壳)。
    面向系统内部时,称为kernel(内核)。内核在外壳之下。
    Linux(命令行方式)、Windows(GUI)、Android的界面属于外壳,而不是内核。

学习操作系统主要关注的是内核,关注操作系统内部是怎样实现的。

kernel内部主要组件

1.CPU调度器
2.物理内存管理
3.虚拟内存管理
4.文件系统管理(disk)
5.中断处理与设备驱动

kernel的特征

1. 并发
并发是指某一个时间段计算机系统中同时存在多个运行的程序,需要OS管理和调度。

并行是指某一个时间点上,有多个同时运行的程序。并行运行方式必须是计算机里有多个CPU.

2.共享
在访问资源时,存在“同时”访问,和互斥共享。
根据资源的属性来决定,比如内存1和内存2就可以同时访问。

3.虚拟

操作系统面对的是硬件,它会将内存虚拟化成地址空间,硬盘虚拟化成文件系统,cpu虚拟化成进程。
它利用多道技术,让每个用户都觉得有一个计算机专门为它服务。

4.异步
程序的执行并不是一贯到底,而是走走停停,向前推进的速度不可预知。

但只有运行环境相同,输入相应,OS需要保证程序运行的结果也要相同。

为什么要学习OS

综合课程:
程序设计语言、数据结构、算法、计算机体系结构等知识。

操作系统已经很成熟了,为什么还要学习?
操作系统还在不停的发展,工控等领域还有强烈的需求。
操作系统很有用,有挑战。

操作系统领域顶级的会议:SOSP USENIX 都是(每两年开一次)

在学习操作系统时,如果牵扯到代码,只需要了解自己感兴趣的核心内容,不可能完全掌握,因为它的代码量十分庞大,以Windowsxp为例,它有45000行左右。

操作系统是系统安全的基础。

学习操作系统时,要注意,由于操作系统和硬件的的发展,很多功能已经不需要操作系统来操作,而是由硬件本身管理。例如磁盘调度和IO调度等。

在学习操作系统时要站在系统的角度上,而不是关注某一个小点。
操作系统需要==权衡 (系统级)==空间与时间 性能和可预测性 以及公平和性能
底层,硬件方面,操作系统需要实现良好的硬件管理和合理的资源分配。例如:硬盘速度和cpu、内存相差很多,操作系统需要协调处理。

os的历史

单用户处理阶段(os只起到加载作用)——>批处理阶段(流水线化,cpu等硬件迅速发展)——>内存的容量变大,可把程序放在内存里,cpu可执行多个程序。——>多道程序设计,
cpu切换将资源给谁,它会产生中断。切换调度。——>分时系统(更好的实现用户交互)
分时为千分之一秒,系统在将第一个程序执行完成后(千分之一秒)迅速处理下一个程序。轮流切换执行。((外设)时钟每千分之一秒产生一次中断,使得操作系统切换)——>个人电脑操作系统(重点是用户界面和IO交互)——>分布式操作系统(数据中心和客户端)——>云计算、嵌入式设备等。

os的启动

操作系统是放在硬盘上的 ,按下启动键之后由BIOS(基本IO系统)提供支持,让操作系统检测外设。(BIOS会从一个指定地址来加载)之后操作系统再加载软件,运行程序。
Bootloader: 加载OS,让OS从硬盘加载到内存中区,让CPU执行OS.

启动时包括:
(1)POST(加电自检)
(2)寻找显卡和执行BIOS(初始化检查外设,键盘等,把Bootloader(原来在硬盘的第一个扇区,512个字节)放进内存——>cpu的控制权由Bootloader掌握——>找到os的起始扇区,加载os,cpu的控制权交给os)

操作系统与设备和程序交互
操作系统的interface是什么?
面向外设:中断
面向系统: 系统调用 和 异常

在这里插入图片描述
为什么应用程序不能直接访问外设呢?
1.内核是被信任的第三方
2.只要内核才能执行特权指令
3.为了方便应用程序,屏蔽复杂性

中断、异常、系统调用的特点和差异

在这里插入图片描述

在这里插入图片描述
异步:操作系统不知道事件什么时候产生。
同步:执行到某个指令时一定会产生,如某个除零的指令。

系统调用的异步: 当系统发出某个请求时是同步的(请求点),请求返回的时间是可能是异步的也可能是同步的。

在这里插入图片描述

中断和异常的处理机制

1.对不同的中断应该设置不同的编号。标志中断是由哪个服务来服务的 。
key(中断编号) 地址 ,查找中断表。
中断的保存与恢复机制,让系统完成中断之后,恢复,继续运行。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

系统调用

在这里插入图片描述
在这里插入图片描述
java的api不是系统调用,它是为jvm服务的。最终还是通过各个操作系统的API来实现系统调用。

在这里插入图片描述

内核态:cpu可以访问内存的所有数据,包括外围设备,例如硬盘,网卡,cpu也可以将自己从一个程序切换到另一个程序。特权。

用户态:只能受限的访问内存,且不允许访问外围设备,占用cpu的能力被剥夺,cpu资源可以被其他程序获取。

为什么要有用户态和内核态?

由于需要限制不同的程序之间的访问能力, 防止他们获取别的程序的内存数据, 或者获取外围设备的数据, 并发送到网络, CPU划分出两个权限等级 – 用户态和内核态。

当应用程序发出一个系统调用时,会完成用户态到内核态的转化,使得控制权从应用程序到OS.

当执行系统调用时,会有态的转化和堆栈的转化,带来较大的开销(比函数调用)。更安全,可靠。

操作系统跨越边界的代价

操作系统的中断、异常、和系统调用、会跨越操作系统和外设、和应用程序 的边界
在这里插入图片描述

操作系统的堆栈和应用程序的堆栈不一样。
这些开销时是值得的,也是必须的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值