操作系统概述

多数时候,我们在学一门语言的时候,写的第一个程序都是hello world;
无论是python、c还是c++等其他高级语言写的实际上都属于我们的应用程序,所以应用程序的执行都需要操作系统支持,你知道操作系统都为我们提供了哪些服务吗?

一、从helloworld学习OS:

#include<stdio.h>
int main(int argc , char * argv[])
{
	printf("hello world");
	return 0;
}

1.首先客户双击图标 或者. /可执行文件名启动程序,告诉操作系统的我要执行这个程序;

2.操作系统检查我们的程序,检查程序是不是一个可执行文件(PE/ELF),如果是,去磁盘找到可执行文件的指令和数据;

3.操作系统创建一个新的进程,如创建PCB,将可执行文件映射到进程结构,此时进程就算是创建好了;
4.操作系统为进程设置CPU的上下文环境,然后把我们的程序交给调度程序,如果我们的程序刚好被调度程序选中,那么就要跳到程序的入口开始执行;
5.执行我们程序的第一条语句一定会发生缺页异常,do_page_fault异常,因为此时我们还没有将我们的指令和数据加载到内存中,所以CPU找不到,发生异常;
6.然后操作系统内存管理给我们的程序分配物理页面(内存),并将程序的指令和代码读入内存,继续执行;如果我们的程序特别大的话。一张页面可能不够用,之后还可能发生缺页异常;
7.程序执行到print()函数,实际上是一个系统调用,内核是sys_write(),在我们的标准输出(屏幕)打印出去;

8.一般我们的显示设备(这里指的是屏幕)由一个进程控制,此时操作系统要做的是将我们的字符串"hello world"送给显示设备进程
9.设备对应的进程接收到操作系统的指令以及要显示的字符串,判断该操作是否合法,如果合法就将该字符串转换成像素,将像素存入映像区;
10.视频硬件将像素转换成数字信号,显示器再去解释信号,激发液晶屏,这样我们就看到了字符串"helloworld"。

实际上,整个过程不仅仅执行我们的helloworld程序
还有进程创建程序、进程调度程序、内存分配程序......
这些程序相互交织
而helloworld是我们应用程序,其他的是操作系统的为我们应用程序提供支持的程序
我们可以看到操作系统给我们做了 启动程序、执行程序、执行结束的善后工作

二、操作系统是什么:

从上面的helloworld程序你大概能隐约的知道操作系统是什么,我这里给出你较专业的定义
1.OS本质也是一个软件;
2.有效、合理的方式组织管理计算机的软硬件资源;
3.合理组织计算工作流程,控制程序的执行提供给用户服务;
4.在一个就是使得用户更加高效灵活的使用计算机。

有效:系统效率,资源利用率(比如我们总是希望cpu能不空闲,IO忙碌起来)
合理:资源的分配策略是否公平合理
方便:用户界面和编程接口(能方便的与OS打交道)

所以操作系统的作用显而易见:

1.资源的管理者(软件资源(磁盘的文件、各类管理信息)和硬件资源(cpu、内存、IO设备等))
细致的划分可以分为以下:
1.进程/线程的管理:状态、控制、同步互斥、通信、调度…
2.存储管理:分配/回收、地址转换(虚拟->物理)、存储保护、内存扩充…
3.文件管理:文件目录、文件操作、磁盘空间、缓冲技术…
4.设备管理:设备驱动、分配回收、缓存技术…
5.用户接口:系统命令、编程接口…

OS如何管理资源:
1.跟踪记录资源的使用情况,实际上就是  数据结构  来记录
(哪些资源空闲、分配给谁、使用多久时间)
2.确定资源分配策略,实际上就是 分配算法,算法去实际的操作数据结构
(一般为动态分配策略)
3.进行资源的分配和回收
(比如分配出去了,将某个数据结构的标志位 修改为1,使用结束了回收了再改为0)
4.协调多个进程对资源的请求冲突

2.各种系统服务的提供者:(如进程创建、文件操作等)
3.是用户程序与硬件桥梁:(屏蔽硬件帮助用户操作硬件,因为硬件操作比较繁琐)
举个例子读文件:你是愿意去自己操作磁头读磁盘 还是 去执行write()
通过操作系统,我们程序员更好的对硬件进行编程。

三、操作系统的特点:

1.并发:有能够处理多个同时性的活动的能力;

单cpu
宏观:所以程序都在执行
微观:每个时刻只有一个程序在cpu上运行

与并发类似的一个概念-----并行:指不同程序在多个硬件部件上执行
没必要刻意的区分。

2.共享:操作系统本身与用户的程序共享计算机的资源。

对操作系统而言:对资源进行合理分配和使用,在一定时间内,要被多个进程交替使用
互斥共享:打印机
同时共享:打开磁盘上的不同的文件,此时磁盘是同时共享的

3.虚拟:一个个的物理试题映射位若个对应的逻辑实体

如何体现虚拟,据举例:
1.假设主机只有一个物理CPU,但是我们看到宏观看到是多个进程看到是每个进程都有自己的物理CPU。
实际上是虚拟的

2.存储器:每个进程运行起来都会有虚拟地址空间,这样看起来每个进行都有自己的物理内存,
可是实际上,所以的进程共享的是一块物理内存

3.显示设备:多窗口或虚拟终端

4.随机:随时对不可预测的事件进行处理

进程走走停停,无法预知进程运行的推进
难以重现系统在某个时刻的状态

四、操作系统的典型架构: 这里说一下linux架构
整体分为用户态和内核态:
1.用户态:应用程序
2.内核态:进程调用模块、虚拟内存管理、物理内存管理、文件系统、设备驱动程序、网络模块、异常处理、中断处理、系统调用接口

五、操作系统的分类:
操作系统的不同是根据 硬件技术的发展、需求的发展以及软件基础的发展而发展。

可以按照出现的先后顺序进行分类:
批处理操作系统:
用户将一批作业给操作系统,形成作业流,操作系统依次的进行处理,吞吐量不错;

SPOOLING系统(技术):同时的外围设备联机操作,又称假脱机技术
思想:利用磁盘做缓冲,将输入、计算、输出分别组织成独立的任务流,使I/O和计算真正并行

分时操作系统:
将CPU的时间划分为若干个片段,系统轮流为终端用户服务,每次消耗一个时间片;

给人一个错觉,每个终端用户都有一个CPU,实际上是大家共享一个物理CPU
体现OS的 虚拟 特性

通用操作系统:
分时和批处理的结合。原则是分时优先,批处理在后

“前台”:需要频繁交互的作业
”后台“:时间性要求不强的作业

实时操作系统:
计算机能及时的进行响应外部事件,规定时间内完成对事件的处理

个人计算机操作系统:计算机为单用户服务,界面友好,操作简单

网络操作系统:在各种计算机的操作系统的上按照网络协议标准开发的软件

分布式操作系统:
计算机的处理或者计算分布在不同的计算机上,允许若干个计算机协同的共同去完成一个任务

嵌入式操作系统:在各种设备、装置或系统中,完成特定功能的软硬件系统,如汽车、手机、电视机、MP3等,对以上系统的开发进行统一调度、资源分配等等

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值