操作系统的一些知识

一、操作系统

1、操作系统的定义

操作系统是一个搞管理的软件

对下,要管理硬件设备;对上,要给软件提供稳定的运行环境。

操作系统是软件、硬件、用户之间交互的媒介。

2、常见的操作系统

Windows、Linux、Mac

3、操作系统的定位

我们平时所说的操作系统,指的是系统调用,操作系统内核,驱动程序这三个部分。 

应用程序java运行在JVM上,属于应用程序
系统调用

操作系统给应用程序提供的API

比如,有个程序想操作一下硬件设备,就需要先通过系统调用,

把操作命令告诉给系统内核,内核调用驱动程序,进一步操作硬件设备

比如,你写了一个System.out.println("hello world"),想要在显示器上打印hello world

也是这个流程,print这个方法在底层一定调用了系统调用,系统调用通知操作系统内核,

内核通过驱动程序找到显卡,最终把数据渲染到界面上。

操作系统内核

操作系统的核心功能,管理功能。

对下,要管理硬件设备;对上,要给软件提供稳定的运行环境。

驱动程序

因为硬件设备种类繁多,厂商各异,

硬件厂商开发硬件时会提供对应的驱动。

电脑装了对应的驱动,才能让系统正确识别硬件设备。

硬件设备也就是硬件,电脑后盖打开,能看到的都是硬件设备

4、并行和并发 

并行:微观上同一时刻,两个CPU核心上的进程,就是同时执行的。

并发:微观上同一时刻,一个核心上只能运行一个进程,但是它能够对进程进行快速的切换。(比如先运行一下QQ,再运行一下画图板,再运行一下CCtalk,非常快速的切换。)宏观上看起来就像是几个进程在同时运行。

究竟是并行和并发,是由操作系统内核负责处理的,我们宏观上感知不到。

因此,往往把并行和并发,统称为并发!!除非显示声明,谈到并发,就是指并行和并发。

二、进程

1、进程的定义

进程(process),也叫任务(task),一个“跑起来”的程序就是一个进程。也就是说,一个正在运行的程序是一个进程,不在运行中的不叫进程,只能说是程序。

如何看电脑上运行了多少进程?

打开任务管理器,就可以看到你电脑上正在运行的所有进程。

每个进程都对应一些资源,进程是操作系统资源分配的基本单位。 

2、操作系统内核是如何管理进程的?

进程是一个重要的“软件资源”,操作系统内核负责管理。

操作系统内核是如何管理进程的呢?

通过描述+组织的方式。

描述:就是讲清楚进程有哪些属性特征。

使用结构体(C语言的结构体)来描述进程属性,给这个结构体起了个特殊的名字,叫做PCB,即进程控制块。

那么可以说,操作系统内核通过PCB来描述进程的属性。

组织:通过一定的数据结构,把多个这样的基本单位给串起来。

通过双向链表,把多个PCB给串起来。

也就是说,我们在任务管理器上看到的进程列表,本质上就是遍历这个PCB链表。

创建一个进程,本质上就是创建一个PCB这样的结构体对象,把它插入到链表中。

销毁一个进程,本质上就是把链表上的PCB结点删除掉。

3、PCB这个结构体中哪些属性 用来描述进程属性特征?

PCB里包含的用来描述进程特征的属性是非常多的,下述这些都是核心的属性:

  1. pid
  2. 内存指针
  3. 文件描述符表
  4. 进程调度相关的属性:(1)进程的状态(2)优先级(3)上下文(4)记账信息

 下面分别进行详细介绍:

PCB中的核心属性说明
pid进程的身份标识符,是唯一的数字
内存指针指向了分配给自己的内存是哪些,描述了进程持有哪些内存资源
文件描述符表硬盘上的文件等其他资源,描述了进程持有哪些文件等其他资源

进程调度相关的属性

进程的状态

  1. 就绪状态:随叫随到,进程随时准备好去CPU上执行
  2. 运行状态:正在CPU上执行
  3. 阻塞状态:短时间内无法到CPU上执行,比如进程在进行密集的IO操作,读写数据。
优先级

先调度哪个进程,后调度哪个进程,

操作系统进行进程调度也是有优先级的,

不是一碗水端平的。

上下文

操作系统在进行进程切换的时候,需要把进程执行的“中间状态”记录下来,保存好。

下次这个进程再上CPU上运行的时候,就能恢复上次的状态好继续往下执行。

也就是“存档,读档”。

进程的上下文,就是CPU中各个寄存器的值(CPU中的寄存器:CPU内置的存储数据模块,保存的是程序运行过程中的中间结果)

保存上下文:就是把这些CPU寄存器的值,记录保存到内存中。

恢复上下文,就是把内存中的这些寄存器值恢复回去

记账信息操作系统统计每个进程在CPU上占用的时间和执行的指令数目,根据这个来决定下一阶段如何调度。

进程调度:

操作系统决定让哪个进程上CPU运行,进程分配CPU资源

进程调度相关的属性:

本质上是为了解决“狼多肉少”的问题,通过并发,让大量的进程可以在少数的CPU上同时运行

操作系统里有一个重要的模块调度器,就是负责让有限的CPU来调度执行这么多进程的,而实现这个模块调度器,就需要PCB提供进程调度相关的属性来完成进程调度。

4、进程的虚拟地址空间

程序中获取到的内存地址,并非是真实的物理内存的地址,而是经过了一层抽象的虚拟地址。

那么,什么是物理地址,为什么不使用物理地址而是使用虚拟地址呢?

物理地址:

内存,物理上就是个内存条,内存条上的内存编号就是“地址”,也就是真是的“物理地址”。

内存有个重要的特点:支持机访问。正是因为这个特点,所以数组取下标操作是O(1)

使用真实的物理地址时,当你写的程序出现了内存越界,反而把人家的Chrome或者其他程序给搞坏了,明明是进程1出的问题,反而把进程二给搞坏了。这就很难受了。

所以为了避免进程之间相互产生影响,在代码中不在使用“物理地址”,而是使用“虚拟地址”。

由操作系统和专门的硬件设备MMU(MMU很多时候也是集成在CPU里的)负责进行虚拟地址到物理地址的转换。

一旦进程访问越界了,这个越界的地址MMU硬件设备就翻译不了了,操作系统内核发现地址超过进程的访问范围,直接会向进程反馈一个错误,引起进程的崩溃。谁出了bug,谁崩溃,其他进程不受影响。

使用虚拟地址解决了进程之间相互影响的问题。

5、进程间的通信

搞一个多个进程都能访问到的“公共空间”,基于这个公共空间来进行交互数据。

通信方式/公共空间有很多具体的体现形式,比如说:基于文件、基于网络。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值