admin管理员组

文章数量:1613391

✏️作者:银河罐头
📋系列专栏:JavaEE

🌲“种一棵树最好的时间是十年前,其次是现在”

目录

  • 操作系统介绍
  • 操作系统的定位
  • 进程
  • 进程控制块
  • 内存管理
  • 进程间通信
  • 思维导图总结

操作系统介绍

操作系统是一组做计算机资源管理的软件的统称。目前常见的操作系统有:Windows系列、Unix系列、
Linux系列、OSX系列、Android系列、iOS系列、鸿蒙等

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

1.对下,要管理硬件设备

2.对上,要给软件提供稳定的运行环境

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

PC端:Windows,Linux,Mac

移动端:Android,IOS

  • Windows

最熟悉的操作系统的是Windows.(使用门槛比较低)

Windows的发展:Windows98,2000,xp,vista,win7,win10,win11

  • Linux

Linux特别适合于进行开发和部署

应用范围:

1.服务器(MySQL)

2.嵌入式设备(在设备中内嵌了一个计算机)

(举例:冰箱,洗衣机,投影仪,空调…)(可编程的)

3.移动端设备(手机)

  • Mac

和Linux比较接近

  • Android

本质上也是Linux

  • 鸿蒙

本质上也是IOS

操作系统的定位

  • 硬件设备:键盘,鼠标,内存,硬盘,风扇,电源。(电脑后盖打开看到的都是硬件设备)

  • 驱动程序:(JDBC的驱动程序就是让JDBC和各个数据库厂商的API进行适配)

硬件设备种类繁多,厂商各异。硬件厂商在开发硬件的同时会提供驱动,电脑装了驱动才能让系统正确的识别硬件设备。

  • 操作系统内核:操作系统的核心功能,管理。
  • 系统调用:操作系统给应用程序提供的API。(比如有个程序想操作一下硬件设备,就需要通过系统调用,把操作命令告诉给系统内核,内核调用驱动程序,进一步的操作硬件设备)

举例:在显示器上打印helloworld应用程序通过系统调用,通知操作系统内内核,内核通过驱动程序找到显示器或显卡这个驱动,然后通过显卡把数据渲染到界面上

  • 应用程序:举例Java程序。

进程

进程是操作系统对一个正在运行的程序的一种抽象,换言之,可以把进程看做程序的一次运行过程;
同时,在操作系统内部,进程又是操作系统进行资源分配的基本单位。

如果不是正在运行的程序就不是进程。

ctrl+alt+delete=>任务管理器

进程(process)也叫做任务(task)

句柄(handler)

系统中包括很多软件资源(进程是一种软件资源),写代码需要用到一些软件资源,软件资源在操作系统内核里。在应用程序的代码中不方便操作。

句柄相当于一个遥控器(简单的整数/编号),通过系统调用借助这个句柄就可以操作软件资源了

(指针也可以视为是句柄,不过它对应的是内存资源)

每个进程都对应一些资源

硬盘和网络统称为IO,硬盘和网络有各自的读写带宽

衡量IO快慢就会用带宽这个词,带宽是一秒能写多少字节

MB:这里的B是Byte

Mbps:这里的b是bit

影响电脑卡的原因是进程多,而不是占用硬盘内存多

进程是操作系统资源分配的基本单位

进程是一个重要的软件资源,由操作系统内核管理。这个管理是描述(属性特征)+组织(用数据结构把多个这样的基本单位组织起来)

  • 描述

使用结构体(C语言)来描述进程属性(操作系统基本上都是C/C++写的)

用来描述进程的这个结构体叫做PCB(Process Control Block)进程控制块。

  • 组织

通过双向链表把多个PCB组织起来(并不是一个单纯的双向链表)

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

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

任务管理器查看进程列表,就是遍历PCB链表

进程控制块

PCB里有哪些描述了进程的特征:

  • 1.pid进程的身份标识符(唯一的数字)

  • 2.内存指针

指向了自己的内存是哪些

  • 3.文件描述符表

硬盘上的文件等其他资源

内存指针文件描述符表描述了进程持有哪些硬件资源

硬件资源,内存,硬盘,网卡都好分配,而CPU不好分配。

设备管理器=>处理器

8核,16线程。一个CPU分为8个核心,每个核心又能一个顶俩(超线程技术),这种情况视为16核

进程有上百个,而CPU就几个,不够分配。

这些进程是希望能够"同时运行",“分时复用”

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

并发:微观上同一时刻,一个核心上只能运行一个进程,但是它能够对进程进行快速的切换。

只要切换速度足够快(2.4GHz,每秒执行24亿条指令),宏观上人是感知不到的。看起来这几个进程好像是同时运行的。

并行和并发是内核负责处理的,但是应用程序感知不到,因此把并行和并发统称为并发。(除非显式声明,否则提到并发都是并行+并发)

操作系统中有一个重要的模块 调度器,就负责让有限的CPU资源调度执行这么多进程。

  • 4.进程调度相关的属性

1)进程的状态

就绪状态: 进程随时准备好了去CPU上执行

运行状态

阻塞状态: 短时间内无法到CPU上执行,比如进程在进行密集的IO操作,读写数据

很多操作系统不会明确区分就绪和运行状态

2)优先级

3)上下文

操作系统在进行进程切换的时候,就需要把进程执行的"中间状态"记录下来,保存好。下次这个进程再次运行的时候,就可以恢复上次的状态好继续向下执行。

“存档”,“读档”

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

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

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

4)记账信息

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

内存管理

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

C语言里的指针提到的内存地址,就是虚拟的内存地址,并非真实的物理内存地址。

内存可以想象是一个大走廊,有很多房间,每个房间大小是1Byte,每个房间有个编号,从0开始依次累加

内存编号就是地址,这个地址是物理地址

内存有个特性:

随机访问:访问内存上任意地址的数据,速度都极快,时间上差不多

正是这个特点,造就了数组取下标操作是O(1)

为了避免这种情况,

针对进程使用的内存空间,进行"隔离",引入了虚拟地址空间。代码里不再使用真实的物理地址,而是使用虚拟的地址。由操作系统和专门的硬件设备负责进行虚拟地址到物理地址的转换。

MMU这个硬件设备能够让转换更快一点,很多时候集成在CPU里

CE是一个类似于"黑客"工具,功能是改另一个进程里的数据。

直接通过C里的指针操作,是无法针对另一个进程的内存进行修改的。

但是操作系统给我们提供了一些特殊的系统调用,通过这些系统调用我们就可以手动的操作另一个进程的内存数据了。

虚拟地址空间就是避免进程之间相互产生影响。

进程间通信

有时候进程之间需要进行数据的交互。需要实现一个多个进程都能访问到的"公共空间",基于这个公共空间来进行交互数据即可。

举例:外卖的"无接触配送"

外卖员把外卖放到约定好的位置,然后顾客去这个位置取外卖,两人没有接触,但是实现了外卖交接。

这里的通信方式有很多具体的体现方式

  1. 管道

  2. 共享内存

  3. 文件

  4. 网络

  5. 信号量

  6. 信号

思维导图总结

本文标签: 操作系统javaEE