操作系统理论地基

 日升时奋斗,日落时自省

目录

一、操作系统

1、概念

2、进程

2.1、描述:

2.2、组织

3、内存管理

4、进程间通信(相互配合)

5、线程

6、进程与线程的区别


一、操作系统

1、概念

操作系统是管理计算机硬件与软件资源的计算机程序,实际就是一个软件的管理性的软件

不是针对一方面的管理,电脑运转不仅仅基于程序,还有硬件设备

对下 :要管理硬件设备

对上:要给软件提供稳定的运行环境

所以 操作系统是软件 和 硬件用户之间交互媒介

对上为什么是硬件,对下为什么是软件 ,怎么理解,如图下理解:

 提及到操作系统,最常见,与熟悉的操作系统就是Windows 系统

Windows系统又有很多版本 98,2000 ,px ,win7, win10 ,win11,。

操作系统 有多种,Windows 更像是针对普通用户使用的

Linux更专注于 程序员使用 

Mac 也是苹果电脑的 操作系统

 手机操作系统 :Andorra (本质上也是Linux)

2、进程

程序躺在文件里面,就是个程序

你双击运行以后就是一个进程(process)

可以启动一下当前的任务管理器,为啥看进程 要看任务管理器

任务(task)就是进程(process)

任务管理器有几个应用程序启动就是几个程序 ,进程是操作系统进行资源分配的基本单位,这时候你就不会认为,你电脑卡跟你的硬盘有什么关系了,开的程序多了,自然就卡,进程就自然就占满了,衡量 IO快慢就会用到带宽 带宽是个啥 (图来解释)

 进程是做什么: 软件资源

刚刚提到 操作系统内核 是会负责管理 跑起来程序的就是进程 

管理: 描述 +组织

2.1、描述:

解释:使用结构体 (C语言 的结构体) 来描述进程属性 

操作系统上 基本都是C或者C++

这个结构体 在进程里起了一个特殊的 叫法 “PCB” (进程控制块)

注: 这里就是一个名字,被大佬们起来的,不好记 知道它是 用来描述进程的就行

 结构体 里描述进程的那些特性

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

(2)内存指针 指向  说自己的 内存有哪些

(3)文件描述附表 硬盘上的文件资源       【(2)(3)描述了进程的 硬件资源  

(4)进程调度相关的属性

注:不要认为理论知识没有用, 原来 我也这么想 ,后来发现, 吃亏的很,对代码的理解性很低

第四条 进程调度 下面包含的比较多,单独解释:

 并发与并行 一般统称为 并发

并发: 这里举一个例子:
相当于一个电脑同时开启了 游戏 ,QQ音乐, 等多个进程,一个核心只能运行一个进程,但是他们每个运行一下,先运行QQ音乐一下,再运行游戏一下,再运行一下同时开启的其他程序,切换速度足够快,人并不能感知到他们是一个一个运行,默认为是同时运行(是不太好理解)

对并发的理解:就像灯泡一样,我在学习物理的时候,有提及过灯泡,灯泡闪烁不是一直的,是有一定的频率,但是这个频率太高了,人眼无法捕捉到熄灭的那一下,也就被默认为灯泡在开启时是常亮的

进程调度相关的属性:有哪些

2.2、组织

解释:通过双向链表 ,把PCB连接在一起(以后再进程提到结构体就会用PCB来代替)

创建一个 进程,本质上就是创建一个 PCB 这样的结构体对象,把它出入到链表中。(开销较大)

销毁一个 进程, 本质上就是删除一个 PCB 这样的结构体 对象,删除一个节点(开销较大)

而任务管理器就 是遍历整个链表

注:这里的链表是真的就是我们 代码里面的那个简单的双链表就能实现的,实现功能比较复杂

3、内存管理

虚拟地址空间(增加隔离性)

程序所获得的的内存地址, 并不是真的物理地址,虚拟一个临时的存储空间(有点抽象)

C语言的指针 内存地址就是虚拟的内存地址

那先不了解这个虚拟地址,如果只用物理地址会带来什么缺陷

物理地址:这个地址好理解吧,硬件设备就是物理地址,硬盘里分好的文件路径,就是物理地址,真实存在的

虚拟地址:相当于临时帮你管理这部分地址,再由我们硬件设备进行操作 将虚拟地址转化为物理地址,将其隔离,

有虚拟地址时:

 4、进程间通信(相互配合)

进程只具有隔离性是不行的,会引入另一个问题

有时候,确实进程之间,需要进行数据进行交互(相互配合)

隔离性 :将进程进行地址上的隔离 

进程通信:与隔离性又很相仿,利用一个“共享空间”,基于这个空间 进行数据交换

这里公共空间 基于: 文件、 网络,共享内存等

公共空间理解:实例:一个家庭有多个孩子,孩子的父母对每个孩子都很好,小孩子之间有点小矛盾了,都会去找父母作为桥梁来解决,这里的父母就是孩子们公共空间。

5、线程

进程是为了解决 “并发编程”的问题,CPU虽然已经在多核时代,但是CPU想要再提高程序执行速度,就不能只停留在精进CPU了,当前的CPU很难再进一步精进,需要利用好CPU的多核资源,不是 CPU核心多了,程序就一下能跑的很快,要快前提是能都利用上

多进程就解决了刚刚的问题,可以调度CPU多核资源

进程提高了速度,但是也有缺点 :消耗资源太多了,开销比较大(创建、销毁、调度)

进程就是 难在了“ 资源分配/回收”  (重量级)

线程就是为了解决进程的问题 ,线程也叫做  “轻量级进程”;

解决了并发编程 开销大的问题(创建 、销毁、调度)更快

如何轻的 :怎么做到轻量级 (把申请资源/释放资源的操作给省下了)

实例解释:还记得 现在的 CPU嘛 多核 多线程 举过一个例子:

8核 16线程 (超线程技术)

一个核 操纵一个进程 同时进行,一个进程下有多个线程

(1)进程开销大解释:

(2)涉及多线程之后(解决资源开销问题) 

 图解:可以看出 进程是包含线程的

一个进程是可以有多个线程的,可以只有一个线程 但是不能没有线程

只有启动第一个线程的时候开销比较大,后序的就省事情了

为什么第一个线程开销大:因为第一个线程 需要创建一个进程后才会有第一个线程

同一个进程中多个线程之间,公用了进程的同一份资源(主要是内存文件描述符表

(1)内存 :同一个进程中的其中一个线程创建一个对象 在同一个进程的其他线程都可以直接使用

(2)文件描述符表:同一个进程中的其中一个线程打开的文件 在同一个进程的其他线程都可以直接使用

如果每个进程上都有多个线程,每个线程都是独立在CPU上调度的 (操作系统是以线程为单位进行调度的,所以调度只关心线程,不关心进程)

每个线程都是独立的,都有自己的执行逻辑(执行流)

注:一个进程有多个线程,但是一个线程是不能在多个进程中

前面说到进程是将多个PCB(控制块)通过双链表进行连接成的,这里的线程也是通过一个PCB来描述的

那线程是不是越多越好,其实不是,图解一下:

 

线程模型:资源共享是好处也是安全隐患, 多线程争抢同一个资源(同一个变量)易触发安全问题

进程模型:天然是资源隔离的:不容易触发,进行通信的时候,多个进程访问同一个资源,可能出现问题

线程没有进程安全,但是这个线程安全问题当前也不用担心,能保护的嘛。

注:多线程编程,本身关于线程的操作,操作系统提供的API

6、进程与线程的区别

数据共享、同步:(该方面基本是两者个有优势)

(1)多进程:数据隔离 ,共享复杂,同步简单

(2)多线程:共享同一个进程的数据,共享简单,同步复杂

内存 ,CPU,创建、销毁、调度多线程更占优势

占内存少,CPU利用率高,创建、销毁、调度更快

编程调试、可靠性进程更占优势

优势:(1)进程:编程简单,调试简单,进程隔离,不会相互影响(安全)

缺点:(2)线程:调试、编程复杂,一个线程崩塌可能会导致多线程瘫痪(不安全)

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值