理解操作系统4——操作系统综述

一、关于操作系统的背景阐述

1、计算机平台包括一组硬件资源(处理器、内存、I/O模块、定时器、磁盘驱动器);
2、计算机程序是为了执行某些任务而开发的;它们接收外来的输入、做一些处理之后、输出结果。
3、根据给定硬件平台来写应用程序的效率是低下的;
a)针对相同的平台可以开发出很多应用程序,所以开发出针对这些应用程序访问计算机资源的通用例程师很有意义的;
b)处理器本身只能对多道程序设计提供有限的支持,所以就需要用软件取管理处理器和其他资源同时被多个程序共享;
c)如果多个程序在同一时间是活跃的,那么需要保护每个程序的数据、I/O使用和其他资源不被其他程序占用;
4、开发操作系统是为了给应用程序提供一个方便、安全和一致的接口。操作系统是硬件平台和应用程序之间的一层软件
5、操作系统可以想象成是资源的统一抽象表示可以被应用程序请求和访问
这些资源包括内存网络接口文件系统等。操作系统为这些资源创建了抽象表示,同时也必须管理它们的使用

操作系统的内容:
进程和线程的管理(处理器管理)、存储器管理(内存管理)、设备管理、文件管理(磁盘数据管理)

====================================================

二、操作系统如何启动

BootLoader是在操作系统内核运行之前运行;->初始化硬件设备、建立内存空间映射图、将系统软硬件环境带到一个合适的状态;
BootLoader是基于特定硬件平台来实现的;不同的处理器架构有不同的Bootloader;虽然BootLoader有差异性,也有共性;
BootLoaser严重依赖硬件实现的

操作模式:1、自启动
                  2、交互模式

BootLoader启动过程:(主要分为两个阶段)
一、依赖于包含CPU体系结构硬件初始化的代码;通常用汇编语言来实现
1、基本硬件设备初始化(屏蔽所有中断、关闭处理器内存指令/数据cache等);
2、为第二阶段准备RAM空间;
3、从某个固态存储媒质中,复制Bootloader第二阶段的代码到RAM中;
4、设置堆栈;
二、C语言完成,更复杂的功能,可读性和可移植性会更好
初始化本阶段要用到的硬件设备;
检测系统内存映射;
将内核映像和根文件系统映像从Flash读到RAM;
为内核设置启动参数;
调用内核(跳转到内核的main函数)

嵌入式Linux系统从软件角度其运行可以分成四个层次
1、引导加载程序
2、Linux内核
3、文件系统
4、用户应用程序

====================================================

三、浅谈操作系统的层次设计

管理计算机系统的软件称为系统软件、以区别应用软件
系统软件分为两块:
1、平台性的:操作系统、内核、驱动程序、运行库等
2、程序开发:编译器、汇编器、链接器等开发工具和开发库;

软件系统都是按照层次结构设计的;
每个层次之间都需要通信,既然要通信就会有通信协议。一般将其称为接口
接口的下面是接口的提供者,由它定义接口;
接口的上面是接口的使用者,使用接口来实现所需要的功能;
接口是被精心设计过的,尽量维持不变;
理论上层次之间只要维持这些接口,任何层都可以被替换;
除了硬件和应用程序,任何层都是对下一层的包装和扩展。这使得应用程序和硬件之间保持相对独立

API:
开发工具和应用程序属于同一个层次,即应用层;
它们都使用同一个接口,即操作系统应用程序编程接口(API)

系统调用:
API的提供者是运行库RunTime Library,什么样的运行库提供什么样的API;
运行库使用操作系统提供的系统调用接口(System call Interface)
系统调用接口往往由软件中断的方式实现;
POSIX 操作系统为应用程序提供的接口规范,这样编程的应用程序可以在不同的操作系统上运行;

驱动层接口:
内核和硬件之间其实还有个驱动层;
驱动层定义的接口提供给内核使用;驱动层的接口往往讲的是如何操作硬件,如何与硬件通信;

硬件规范、硬件接口
驱动层对于硬件层来说是硬件接口的使用者;这些硬件接口往往被叫作硬件规格
硬件是接口的定义者;驱动层时硬件接口的使用者;
操作系统和驱动程序的开发者通过阅读硬件规格文档所规定的各种硬件编程接口标准来编写操作系统和驱动程序;


操作系统的功能
1、提供抽象的接口;
2、管理硬件资源;

硬件的抽象和管理、驱动层:
有时候可以将操作系统和驱动层当做一起来看待;或者说硬件驱动,驱动层可以看作是操作系统的一部分
驱动程序和内核都一起运行在特权级别,但是相互之间又保持一定的独立性;这使得驱动程序相对灵活,方便替换;

首先硬件多如牛毛,那么硬件规格就很多,相应驱动程序要写很多种,来适配不同硬件。
那么一个操作系统要在不同硬件上执行就要写很多驱动来适配,这是一件很麻烦的事。也不太现实。
一般情况下,驱动程序的开发由硬件生产厂商提供,但是它们要根据一定的接口和规范操作系统的开发者为硬件生产厂商提供了一系列的接口和框架
凡事按照这个接口和框架开发的驱动程序都可以使得操作系统正常在该硬件上运行。

刚才说到操作系统给硬件驱动提供了一系列的接口和框架。
这样硬件逐渐被抽象成了一系列的概念。
磁盘被抽象成文件系统,图形硬件被抽象成GDI,声音和多媒体设备被抽象成DirectX对象等;
程序员就从硬件细节中解放出来,更多地关注应用程序本身的开发。
繁琐的硬件细节全都交给了操作系统。

====================================================

四、两大主题

操作系统在我看来有两个核心主题,如何充分利用CPU?如何充分存储器(内存)?

CPU高效利用:
所有的应用程序以进程的方式运行在比操作系统权限更低的级别。
每个进程都有自己独立的地址空间;使得进程之间的地址空间相互隔离。
CPU由操作系统进行统一分配,每个进程根据优先级都有机会得到CPU。具体来讲就是进程的调度方面的知识;
总体目标是使得每个进程从逻辑上看来都可以独占计算机的资源。
另外也使得CPU能在多个进程之间很好地共享。

更多内容可以参考进程、多线程章节;

内存的高效利用:

涉及到内存的模型、虚拟地址空间,段页式管理等;毕竟在冯诺依曼计算机体系结构中,计算机的核心就是内存展开的,内存也成了制约性能提升的关键因素。

更多内容可以参考内存模型与地址空间章节;

====================================================

相关链接: 

操作系统知识大全:https://blog.csdn.net/qq_34959478/article/details/82530308

猜你喜欢

转载自www.cnblogs.com/grooovvve/p/11605645.html