操作系统概述和硬件视角
文章目录
- 操作系统概述和硬件视角
- 一、前言
- 二、操作系统的概述
- 2.1 定义
- 2.2 目的
- 2.3 关注点
- 2.4 程序来看OS
- 2.4.1 提出问题
- 2.4.2 解决编译器的很多问题
- 三、硬件视角
- 3.1 组成
- 3.2 核心概念
- 3.2.1 CPU
- 3.2.2 存储器
- 3.2.3 I/O设备
- 3.2.4 总线
- 四、小结
一、前言
今天,我们开始步入操作系统的学习啦~
二、操作系统的概述
2.1 定义
Operating System,简称OS,是一组控制和管理计算机硬件和软件资源的程序集合
本质:OS是一个软件,需要在硬件上运行,为软件系统提供访问接口
s:software
上管软件,下管硬件,就是操作系统
程序集合:操作系统需要编码
2.2 目的
合理地对各类作业进行调度,方便用户使用计算机
使系统资源的利用率高,系统的吞吐量大
利用率高:使一个事物可以尽可能的做更多事
吞吐量大:一次性干好多事
2.3 关注点
如何设计操作系统以及设计操作系统需要解决的问题和方案
2.4 程序来看OS
2.4.1 提出问题
hello.c文件在磁盘怎么存,怎么读,可以我们在磁盘那么大的空间可以找到hello.c?
文件系统
hello.c怎么变成CPU能认识的指令?
识别指令(操作系统能做的活都限制在指令集中)
我们现在写的程序都是基于OS的程序设计(裸机程序)
软件可以运行多次,甚至同时运行很多软件,CPU如何管理多个任务?
程序存放内存之中,内存如何进行管理?
核心:操作系统如何管理CPU,如何管理内存,如何管理磁盘,如何管理设备(IO)
涉及进程和线程(调度和同步机制)、内存管理、文件系统、IO设备
2.4.2 解决编译器的很多问题
编译器和操作系统的关系:
操作系统和编译器是彼此辅助的关系:编译器是基于操作系统的,帮助操作系统管理资源的以及支持编译行为
一款编译器要解决的问题:解决CPU指令集问题;不同操作系统的问题
如果操作系统是none——说明它是直接面向CPU编程,不是为系统服务
gcc不像javac(java的编译器是javac),gcc在windows上写的程序,在Linux上就是运行不了。而java语言可以跨平台运行。
gcc编译过程
- gcc是一个总的调度器,后面跟着一个选项,决定了干活干到什么程度(语法)
- 预处理和汇编,一定程度上,人类还是看得懂的,后面不行
- 运行出错,一般是链接出错
- 编译器和汇编器都是来解决CPU的,链接器是解决内存管理的
gcc -E -o hello.i hello.c预处理
gcc -S -o hello.s hello.i生成汇编文件(人们能看懂的助记符) 编译
cc1 hello.c -o /tmp/cceVNE1I.s编译器 gcc -S
里面含有很多编译所产生文件的目录
在编写程序时,所谓的include就是把文件打开了,最终编译的是.c文件,只是将会重复编译的文件整成头文件,包含在.c文件中了,最终是一起编译的
gcc -c -o hello.o hello.s将助记符一一映射,变成了非ASCII码的文件 汇编
as -o /tmp/cc8ATX9H.o /tmp/cceVNE1I.sas-assembler 汇编器 gcc -c借助
nm、objdump来看懂
.o是gcc二进制指令流
里面有很多-c,-lc,-lgcc等都是第三方库——链接(组装车间)
gcc -o build hello.o链接
ld -o build /tmp/cc8ATX9H.o .../*.o -lc链接器 gcc不仅需要自己的.o,还需要很多操作系统的依赖.o,还有很多第三方库的.o(-lc)
为什么说编译是在操作系统下运行的呢?因为编译器也把操作系统对应的依赖文件装进去了,并且第三方库(我们写程序也需要很多别人写好的函数,如标准C库)在操作系统中有
as,ld,cc1这些东西比较底层,做了解
三、硬件视角
3.1 组成
一个或多个处理器(CPU)、主存、键盘 + 鼠标、显示器、网络接口、打印机
- CPU不存指令,CPU如果存指令,消耗会很大,于是有了主存,主存相当于CPU外面的一个仓库。
- 主存包括内存 + 磁盘
- 键盘 + 鼠标、显示器、网络接口、打印机都属于IO
- 磁盘是由磁盘控制器管理的,磁盘控制器是由驱动控制来工作的
CPU -> Cache -> 内存、数据内存、控制器
控制器:控制硬件产生高低电压和频率和另外一个芯片达成通信过程(相当于一个小芯片)
CPU不能做这个事情,因为它不能停,是一直高速转动的,CPU负责控制控制器
CPU里面有寄存器(不同CPU的寄存器不一样[厂家决定],数量少),数据是通过寄存器写到内存里面的,CPU就是依靠寄存器实现和内存的交互(有专门的指令集)
指令集
- PC:Program Counter(程序计数器),PC指哪,CPU就在哪运行
- SP:Stack Pointer(栈指针),控制在内存存放东西
注意:每个厂家实现的行为不一样~
3.2 核心概念
3.2.1 CPU
指令集和结构特点
寄存器和内存的加载、存储指令
把内存的东西取到寄存器里面,在寄存器里操作完之后,再放回内存
寄存器不能通过地址来访问,只能通过写汇编访问
基本运算指令
特殊功能指令
资源:寄存器
通用寄存器
R0-R12(ARM体系)
特殊寄存器
PC寄存器
SP寄存器
保护和恢复信息
PSW寄存器(状态寄存器)
还在运行时需要保存(比如:中断)
工作模式
工作模式:有独立的空间,独立的任务
特权 & 非特权
中断模式 & 系统调用★
3.2.2 存储器
存储器的访问时间和容量关系
寄存器、缓存
缓存是一行一行存
局部性原理
cache比内存快
常见主存(Main Memory)
意识性存储器(掉电易失)
RAM(Random Access Memory)
掉电易失
ROM(Read Only Memory)
存了不丢
磁盘
非意识性存储器
- 磁盘结构
- 磁道、柱面、扇区
3.2.3 I/O设备
I/O设备工作模型
实现输入输出的3种方式:
忙等(busy waiting)/轮询
中断
中断处理流程
中断发生就要保护现场和恢复现场,硬件/软件来保护,
异常和中断
3.2.4 总线
衔接不同的设备
分高速总线和低速总线
四、小结
本篇仅对操作系统进行一个总览,有一个感性的理解,之后会分主题深入探索。