操作系统简要知识

一.操作系统的性质与作用

操作系统是一个软件,由代码构成程序

  1. 主要职责是管理各种硬件设备
  2. 给其他软件提供稳定的运行环境

由于一个电脑有许多硬件,每种硬件都有许多不同厂商,各自硬件如何在电脑上正确无误使用就依赖于操作系统,由操作系统管理不同硬件设备并提供给软件统一的api

二.进程/任务(Process/Task)

进程就是操作系统提供的一种 "软件资源",是进行系统资源分配的基本单位,每个进程都需要消耗一定的硬件资源

一次仅能运行一个进程的操作系统称为单任务操作系统,许久以前的设备,一次性只能运行程序,例如古早的手机如果想使用QQ只能在前台打开才可接受信息,切出QQ到别的程序QQ无法接受信息

能运行多个程序的称为多任务操作系统,例如如今的手机,电脑,手机可以在后台挂QQ微信,甚至游戏,电脑更为直观,打开任务管理器即可看到许多进程

进程如何管理(以Linux为例)

1,描述

使用,结构体/类,这样的方式罗列出进程的属性,操作系统一般由C/C++实现,没有Java写的操作系统 ,一般使用的是结构体

该结构体称为PCB(Process Control Block)

c 复制代码
struck task_struct{...}

2,组织

运用数据结构将许多结构体/对象,串到一起

Linux中使用链表结构串联许多个结构体

我们使用的任务管理器就是对链表信息的遍历,打印,删除...

三.PCB的核心属性

1)pid

进程的身份标识,系统会保证,同一时刻,同一机器上,每个进程的pid是唯一的,因此后续对进程进行操作常常依靠pid作为标识

2)内存指针

内存是进程运行中消耗的重要资源,每个进程都需要对系统发送申请后才由系统给进程分配资源。

内存指针即描述了该进程可使用的内存(包括该部分内存哪部分是指令,哪部分是数据)

3)文件描述符表

描述进程所涉及的 硬盘 相关资源

进程常常需要访问硬盘, 操作系统把上面提到的各种资源(文件、设备、管道、套接字等)都抽象成了"文件" 。对进程来说,操作键盘输入、硬盘文件、网络连接,都可以用一套相似的"读文件"、"写文件"的接口。

4)状态

描述某个程序是否能到(是否合适)CPU上执行

分为:

就绪状态,随时可到CPU上执行

阻塞状态,例如进程在等待IO(等待与挂起),此时如果将程序放到CPU上执行,由于用户的IO时机不确定,即使在CPU上程序依旧无法继续进行,浪费了CPU资源,因此不适合此时到CPU上执行,因此划分为阻塞状态

4)优先级

结合下文四.进程对CPU的消耗观看

多个进程间每个进程在CPU上执行的时间不是平均的,有的进程执行时间片较其他的多,就表示了该进程的优先级较高

5)记账信息

每个进程占据了多少CPU时间会被进行统计,称为记账信息,用于避免某个进程完全无CPU资源分配,根据记账信息来调整CPU分配时间片的策略

上下文

进程上下文就是操作系统给每个进程进行的"游戏存档"。

当需要换另一个进程运行时,操作系统就进行对当前进程的存档,然后加载下一个进程的读档。

这样,每个进程被切换回来时(重新对该程序读档),都能精确恢复到它上次被暂停的地方,就像什么都没发生过一样。这是实现多任务(同时"运行"多个程序)的基础。

四.进程对CPU的消耗

CPU每个逻辑核心,同一时刻,仅能执行一个进程,因此为了实现多任务进程,将运用分时复用(并发)机制

以单核为例,单核CPU上,

把连续的时间轴划分成一个个非常小、长度固定的时间间隔,称为 "时间片"。

轮流分配: 操作系统按照特定的规则(如轮询、优先级),将每个时间片依次分配给不同的进程

快速切换: 资源在不同使用者之间快速切换。当一个进程的时间片用完,无论它是否完成任务,资源都会被强制收回并分配给下一个等待的进程。

宏观并发: 由于时间片非常短(毫秒甚至微秒级),切换速度极快,从用户或宏观角度看,多个进程就像在"同时"进行

五.内存管理

核心结论:进程独立性,每个进程的内存是彼此独立,互不干扰的

为了维护系统的稳定性(防止一个进程的崩溃影响其他进程),通常情况下一个进程无法访问另一个进程的内存。

进程间通信

虽然进程具有独立性,但是无法避免的,会有多个点进程相互配合完成的工作。

有许多方法可进行进程间通信,所有方法本质上都是通过创建某种形式的"公共访问区域",让不同进程能通过该区域交换数据或状态

Java程序员主要使用的进程间通信方式是网络,网络支持不仅支持同一主机不同进程的交换,还支持不同主机的不同进程间交互

后端常常是一组服务器间进行通信

相关推荐
退役小学生呀6 分钟前
十、K8s集群资源合理化分配
linux·云原生·容器·kubernetes·k8s
wuxuanok7 分钟前
Web后端开发-请求响应
java·开发语言·笔记·学习
诗句藏于尽头1 小时前
内网使用rustdesk搭建远程桌面详细版
笔记
蜡笔小电芯1 小时前
【C语言】指针与回调机制学习笔记
c语言·笔记·学习
Winner13001 小时前
Debian、Buildroot 和 Ubuntu 都是基于 Linux 的系统区别
linux·ubuntu·debian
丰锋ff1 小时前
瑞斯拜考研词汇课笔记
笔记
1nullptr1 小时前
UNIX程序设计基本概念和术语
linux
是阿建吖!2 小时前
【Linux | 网络】网络基础
linux·网络
mmoyula2 小时前
【RK3568 驱动开发:实现一个最基础的网络设备】
android·linux·驱动开发
阿杆2 小时前
😡同事查日志太慢,我现场教他一套 grep 组合拳!
linux·后端