• JavaEE-操作系统


    ✏️作者:银河罐头
    📋系列专栏: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

    操作系统的定位

    image-20221120094748879

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

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

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

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

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

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

    进程

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

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

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

    image-20221120101437671

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

    句柄(handler)

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

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

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

    image-20221120103403618

    每个进程都对应一些资源

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

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

    MB:这里的B是Byte

    Mbps:这里的b是bit

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

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

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

    • 描述

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

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

    • 组织

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

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

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

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

    进程控制块

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

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

    image-20221120110410744

    • 2.内存指针

    指向了自己的内存是哪些

    • 3.文件描述符表

    硬盘上的文件等其他资源

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

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

    设备管理器=>处理器

    image-20221120111206490

    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)

    image-20221120145726074

    为了避免这种情况,

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

    image-20221120152302346

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

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

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

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

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

    进程间通信

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

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

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

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

    1. 管道

    2. 共享内存

    3. 文件

    4. 网络

    5. 信号量

    6. 信号

    思维导图总结

    image-20221120170656837

  • 相关阅读:
    负载均衡有哪些?
    1、读写分离、分库分表
    Tomcat Arbitrary Write-file Vulnerability through PUT Method (CVE-2017-12615)
    前端工程化(vue2)
    支持模板的C++循环队列设计实现与优化
    如何用 GPTs 帮你写科研项目申请书?
    少儿编程竞赛概览
    Django学习一:创建Django框架,介绍Django的项目结构和开发逻辑。创建应用,编写主包和应用中的helloworld
    css的颜色值表达方式(共计6种)
    这么多年,Android 虚拟机到底干了些什么?
  • 原文地址:https://blog.csdn.net/qq_63983125/article/details/127947113