操作系统
【1】什么是操作系统
操作系统是一种管理的计算机硬件的软件资源的程序。它充当了计算机系统和应用程序之间的接口。使得计算机用户能够地使用计算机系统来完成各种任务。操作系统是负责管理和分配计算机的处理器、内存、硬盘等等硬件资源,同时也提供一些基本的服务,比如文件系统、网络系统、网络连接、进程管理等。常见的操作系统包括Windows、Mas OS、Linux等。
【2】冯·诺依曼体系
数学家冯·诺依曼提出了计算机制造的三个基本原则,即采用二进制逻辑、程序存储执行以及计算机由五个部分组成(运算器、控制器、存储器、输入设备、输出设备),这套理论被称为冯·诺依曼体系结构。
这里的存储器指的是什么呢?——内存。
而内存具有一个特点:带电存储,掉电易失、
与内存相对的就是外存,它具有永久性存储能力,常见设备有硬盘等,外存不是这里指的存储器,而是外设的一种,属于输入输出设备。
【3】操作系统的概念
任何计算机系统都包含一个基本的程序集合,称为操作系统(OS),它是一个进行软硬件资源管理的软件。
笼统的理解,操作系统包括:
内核(进程管理,内存管理,文件管理,驱动管理)
其他程序(例如函数库, shell程序等等)
为什么操作系统要管理软硬件呢?
操作系统对下通过合理地管理软硬件资源(手段)对上来为用户提供良好的(稳定的、高效的,安全的)执行环境(目的)。
【4】理解管理
在整个计算机软硬件架构中,操作系统的定位是: 一款纯正的“搞管理”的软件。
如何理解 "管理"?
比如在大学里,大学生的就近管理者是辅导员,但是说实话大部分学生一学年下来都没见过辅导员,那他又是如何管理大学生的呢?
对于管理者要建立这样的理解:管理者不需要和被管理者直接交互,依旧能管理好被管理对象。
所以说这是怎么做到的呢?
一般与大学生直接交互的都是各班班干或学生会,他们可不算是管理者,真正的管理者需要对重大事宜有决策的能力。对于管理者而言,他们的任务便是审时度势,做决策和做执行。而做决策是需要一定依据的,而依据来源于什么?来源于管理者所获取的*数据*。
虽然大学生不直接与辅导员打交道,但是他们的所有数据早就被辅导员拿到了,而且数据还在一直更新。辅导员的一切决策都是基于手中的数据和学院政策与规定的,比如看哪些学生绩点太低,需要push一下这些学生学习。
管理者对于被管理者的管理,在本质上其实是对于被管理者的数据进行管理。
说了一大堆,可还是不知道所谓的数据是从哪来的,管理者不直接和被管理者交互又该如何拿到数据呢?而且被管理者的数据是持续更新的,管理者又该如何一直拿到更新的数据呢?
所以说,在管理者和被管理者之间应当还有一个中间层——执行者。
管理者负责根据上报的数据做决策,执行者负责两个任务:一是和被管理者接触以拿到对应数据,二是执行管理者分派的指令。
以上所述其实都能适用于操作系统和硬件,它们之间也有一个中间层——驱动程序。
我们接着聊,管理者拿到数据后该如何操作和管理呢?就比如辅导员拿到学生的数据,直接看的话会发现杂乱无章,不过其实学生的信息种类是一样的,就像姓名、性别、电话、家庭住址、成绩等等,可以把信息高度提炼出来,抽象为一个struct结构体,再把学生数据填充到一个个结构体中来进行管理。
然而要管理的学生数量是在有点大,为了便于管理,可以建议辅导员建立链表,这样一来,原本对学生数据做管理就变成了对链表做管理。
这实际上是一个对被管理对象进行建模的过程,重点在于管理者要做到“先描述,再组织”,也就是先根据被管理者的数据进行概括和抽象,再对这一抽象用数据结构进行组织,因此对于数据的管理也就变成了对于数据结构的管理,这就是我们操作系统的管理手段。
小结:
管理的本质是对数据做管理,管理的方法是“先描述,再组织”。
计算机管理硬件的方法:
1.描述起来,用struct结构体或其他(和语言有关)
2.组织起来,用链表或其他(和数据结构有关)
【1】操作系统的作用
隐藏丑陋复杂的硬件接口提供良好的抽象接口管理、调度进程,并且将多个进程对硬件的竞争变得有序。
【2】多道技术
(1)产生背景:针对单核,实现并发
现在的主机一般是多核,那么每个核,那么每个核都会利用多道技术 有4个cpu.运行cpu1的某个程序遇到io阻塞,会等到io结束在重新调度, 会被调度到4个cpu中的任意一个,具体由操作系统调度算法决定。
(2)空间上的复用
如内存中间同时有多道程序空间上的复用指的是在内存中同时运行多个程序,这样可以有效地利用内存资源。
(3)时间上的复用
复用一个cpu的时间片指的是共享同一台机器的多个进程可以轮流使用cpu,从而避免了长时间等待的情况发生。
I/O指的是输入/输出(Input/Output)操作,也就是计算机系统与外部设备之间的数据交换。计算机程序通过I/O操作从外部设备获取输入数据或将输出数据发送到外部设备。
强调:
遇到io切,占用cpu同时时间过长也切,核心在于切之前将进程的状态保持下来,这样才能保证下次切换后来时,能基于上次切走的位置继续运行。
【5】操作系统的发展史
-
早期计算机:20世纪40年代至50年代,早期计算机使用的操作系统非常简单,通常称为"监控程序"。
没有操作系统的概念。所以的程序设计都是直接操控硬件。
-
批处理系统:20世纪50年代后期,批处理操作系统开始出现。批处理系统能够自动化执行一系列作业,而无需人工干预。它们允许一次性提交多个作业,并按照一定的顺序进行处理。
设计人员、生产人员、操作人员、程序人员和维护人员直接有了明确的分工 计算机被锁在在专用空调空间中
由于专业操作人员运行忙着便是“大型机”
-
分时操作系统:20世纪60年代,分时操作系统开始出现。这种操作系统允许多个用户通过终端同时访问计算机系统,并实现了以时间片轮转方式共享计算机资源。UNIX是其中一个重要的分时操作系统。
多道技术:多道技术的多道指的是多个程序
多道技术的实现是为了解决多个程序竞争或者说共享同一个资源(比如cpu)的有序调度问题。
解决方式即多路复用 多路复用分为时间上的复用和空间上的复用 空间上的复用: 将内存分为几部分,每个部分放入一个程序,这样,同一时间内存中就有了多道程序。 时间上的复用: 当一个程序在等待i/o时,另一个程序可以使用cpu 如果内存中可以同时存放足够多的作业,则cpu的利用率可以接近100% 类似与我们小学教学所学的统筹方法 (操作系统采用了多道技术后,可以控制进程的切换或者说进程之间去争抢cpu的执行权限。 这种切换不仅在一个进程遇到io时进行,一个进程占用cpu时间过长也会切换或者说被操作系统夺走cpu的执行权限。)
-
客户机-服务器模型:20世纪80年代,随着个人计算机的普及,客户机-服务器模型的操作系统开始流行。这种模型将计算任务分配给服务器来处理,而客户机主要负责显示和输入。微软的Windows和苹果的Mac OS是这一时期最知名的操作系统。
即使可以利用cpu只有一个(早期的计算机确实如此),也能保证支持(伪)并发的能力。 将一个单独的cpu变成多个虚拟的cpu(多道技术:时间多路复用和空间复用+硬件上支持隔离),没有进程的抽象,现代计算机将不复存在
【四】任务1调度算法介绍 【1】什么是进程? 进程其实就是正在进行的一个过程或一个任务 复杂执行任务的就是CPU
【2】进程和程序的区别 (1)理论上 程序基石一堆数据和代码(存放在硬盘中的文件) 进程就是指的是程序的运行过程(通过启动入口将你的程序启动起来的过程)
(2)例子 就比如你去快递站拿快递 (你在去拿快递要做的事情就是进程)
【3】进程的调度问题 CPU调度进程 (1)什么是调度算法 想要多个进程交替运行 操作系统必须对这些进行调度 这个调度与不是随即进行的,二十需要遵循一定的法则 由此就有了进程的调度算法 (2)先来先服务算法 1.理论 先去先服务(FCFS)调度算法是一种最简单的调度方法
2.适用场景
FCFS算法比较有利于长作业(进程),而不利于短作业(进程)。 由此可知,本算法适合于CPU繁忙型作业,而不利于I/O繁忙型的作业(进程)。
(3)短作业优先调度算法 1.理论 短作业优先
2.该算法即可用于作业调度,也可用与进程调度
但对长这样不理
不能保证紧迫性作业(进程)被及时处理,作业的长短也是被估算出来的
【四】时间片轮转法 时间片轮转法是一种常用的调度算法,特别适用于分时操作系统中多个用户共享计算机资源的场景。它将处理器的时间划分成若干个时间片,并按照固定的顺序将每个进程分配到一个时间片中去执行。
具体来说,时间片轮转法的工作原理如下:
-
将所有需要执行的进程按照先来先服务(FCFS)的原则排队。
-
将处理器的时间分成固定长度的时间片,比如说每个时间片为10ms。
-
每当一个新的时间片开始时,调度程序将把当前正在运行的进程挂起,将其放回就绪队列的尾部,然后从队列的头部取出下一个进程,将其分配给处理器执行。
-
如果一个进程在它所分配的时间片内没有完成它的任务,则该进程被暂停并被放回就绪队列的尾部。下一个进程再次从队列的头部被选中并执行。
-
当一个进程完成它的任务时,它会自动退出并从队列中删除,然后调度程序选择就绪队列中的下一个进程并将其分配给处理器执行。
-
这个过程会一直持续下去,直到所有进程都执行完毕。
优点:
时间片轮转法的优点是公平性和响应度高。它确保每个进程都能在一定时间内获得处理器的使用权,并且在多任务环境中保证了进程之间的均衡性。此外,它还可以避免进程长时间占用处理器而导致的系统崩溃。
缺点:
是每次切换进程时需要花费额外的开销,因此当时间片长度很短时会增加处理器的负担。此外,该算法对I/O密集型进程的响应不够及时,因为当进程在等待I/O操作完成时,它仍然会被强制暂停并等待下一个时间片到来。
总体而言,时间片轮转法是一种简单而有效的调度算法,尤其适用于多用户共享计算机资源的场景。
【6】并发串行并行
串行:就是按照顺序一个个的执行
并发行:感觉上是并行其实是串行
并行:同时运行
【7】同步/异步/阻塞/非阻塞
【1】同步
同步就是在发出一个功能调用是,在没有得到结果之前,该调用就不会返回。
【2】异步
异步的概念和同步相对。
当一个异步功能调用发出后,调用者不能立刻得到结果。
当该异步功能完成后,通过状态、通知或者调来通知调用者。
【3】阻塞
阻塞调用是指调用结果返回之前,当前线程会被挂起(如遇到io操作)
函数只有在得到结果之后才会将阻塞的线程激活。
有人也许会把阻塞调用和同步调用等同起来,实际上它是不同的。
对于同步调用来说,很多时候当前线程还是激活的,只是从逻辑上当前函数没有返回而已。
(1)同步调用
apply一个累计1亿次的任务,该调用会一直等待,直到任务返回结果为止,但并未阻塞住(即便是被抢走cpu的执行权限,那也是处于就绪态)
(2)阻塞调用
当socket工作在阻塞模式的时候,如果没有数据的情况下调用recv函数,则当前线程就会被挂起,直到有数据为止。
【4】非阻塞
非阻塞和阻塞的概念相对应
指在不能立刻得到结果之前也会离开返回
同时该函数你会阻塞当前线程
同步和异步针对的是函数/任务的调用方式
同步是指当一个进程发起一个函数调用的时候一直等待结果的返回
异步是指当一个进程发起一个函数调用的时候,不需要一直等待结果的返回 而且是可以继续其他的任务
阻塞和非阻塞针对的是进程或线程(已经跑起来的函数/任务)
阻塞遇到了一定的IO,需要事件处理,这时候就会将进程或线程挂起
非阻塞,跟阻塞相反,没有遇到IO
同步阻塞:任务按顺序执行, 每个任务阻塞后续任务
异步阻塞: 任务在执行时无需要等待,但阻塞后续任务
同步非阻塞: 任务按顺序执行, 执行期间不阻塞后续任务
异步非阻塞: 任务在执行是无需等待,且不阻塞后续任务