网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
章节内容:
- 绪 论:讲述了操作系统的基本概念,发展和分类,运行环境,体系结构
- 进程管理:介绍进程和线程,处理器的调度,同步与互斥,死锁
- 内存管理:介绍了内存分配方式,虚拟内存管理,内存管理方式的对比
- 文件管理:文件系统的逻辑结构和物理结构,文件系统的实现,磁盘组织管理
- 设备管理:I/O管理,I/O子系统,告诉缓存和缓冲区
章节内容可以理解为主要围绕计算机硬件来讲解的:
计算机硬件包括: 1、CPU(进程管理) 2、内存条(内存管理) 3、硬盘(文件管理) 4、显示器、键盘、鼠标,打印机(设备管理)
这样就容易理解整个计算机系统了。
章节一:绪论
主要讲解了操作系统为何产生以及发展。思考一下,刚开始把一堆CPU,内存,硬盘和鼠标键盘给你,你要怎么用起来,要想对他们进行各种协助就要一个东西来管理。最初的硬件是通过人工来管理的,特别选择女性来管理,因为各个插头的拔插和连接需要很细心。但是慢慢的发现这样很麻烦,就开始有脱机输入输出技术–》批处理技术–》操作系统。
现代操作系统最基本的特征是:并发和共享。
操作系统的五大功能:处理器管理、存储器管理、文件管理、设备管理、提供用户接口
并行性:两个或多个事件在同一时间同时发生
并发性:两个或多个事件在同一时间间隔发生,交替进行。
操作系统分类:批处理、分时、实时、嵌入式、网络、集群、分布式。
用户态和核心态: 用户态: 用户程序执行时机器所处的状态 权限小,只能执行特定指令。
核心态:操作系统管理程序执行时机器所处的状态 权限大,能执行特权指令。 特权指令:I/O指令、设置中断屏蔽指令、清理内存指令、设置时钟指令。
核心态只向用户提供接口,使得用户态能执行特定的指令和中断等。
操作系统的体系结构: 1、模块组合结构 2、层次结构 3、微内核结构(为了实现分布式系统环境,内核(普通用户进程)只留下最基本的功能,其他由运行在服务器进程来实现,形成 “客户/服务器”模式。客户拥有微内核
章节二:进程管理
进程和线程 比较:
1、调度:进程是拥有资源和独立调度的基本单位 线程只是独立调度单位,运行时资源属于进程。
2、拥有资源: 不管是有无线程的操作系统,进程都是拥有资源的基本单位,而线程只拥有极少的私有资源(程序计数器、一组寄存器、栈。用来保存线程的执行历史和线程的执行状态,这些资源也是进程的)
3、并发性:有线程的操作系统,进程可以并发,线程也可以并发。可以理解为一个程序有好几个进程,每个进程又有好几个线程。
4、系统开销:进程大(切换进程时要保存运行环境,重新启动时又要回复) ,线程小(自己本来就那么一点可怜的资源,开销肯定小)
进程包括: 程序段、数据段、进程控制块(是进程存在的唯一标志,因为在进程的整个生命期终,系统总是通过进程控制块进行控制的)
基础的基本状态:运行、就绪、阻塞。只有阻塞是主动的,没有资源就自己阻塞,其他都是被动的。
死锁产生的四个必要条件:互斥、请求与保持(没有得到新的资源前现在拥有的资源不释放)、不剥夺、环路等待(你等我我等你释放资源)
用户级线程和内核级线程区别:
- 用户级线程:当一个用户级线程阻塞,整个进程都必须等待。
- 内核级线程:当一个内核级线程阻塞,不会影响其他线程。因为一旦线程阻塞,内核会从当前或者其他进程(process)中重新选择一个线程保证程序的执行。
进程通信:
- 共享存储器系统 :设置一个共享存储区
- 消息传递系统:直接通信方式、间接通信方式(设置一个中间实体-信箱)
- 管道通信系统:管道是用于连接读写进程以实现它们直接通信的共享文件,所以管道是共享文件。
处理器的三级调度: 运行频率:高级调度(作业调度)<中级调度< 低级调度(进程调度)
每次高级调度(作业调度)必须解决两个问题:1、决定操作系统可以接纳多少作业 2、决定接纳哪些作业
中级调度:可以理解为 操作系统将外存上的页面调入内存。
调度的评价标准: 1、CPU利用率 2、系统吞吐量 3、响应时间 4、周转时间
常见调度算法: 1、先来先服务 2、短作业优先 3、优先级(作业调度、进程调度) 4、时间片轮转 5、高响应比优先 6、多级队列(若干个独立的队列) 7、多级反馈队列(多个队列形成一条链,前面的队列执行了后面的队列才执行)
同步与互斥:
互斥:进程-资源-进程
同步:进程-进程
如何区分:只要是同类进程即为互斥关系,不同类进程即为同步关系。
临界资源和临界区:
临界资源:属于系统资源
临界区:属于进程,是进程访问临界资源的代码块。
同步应遵循的准则:
- 空闲让进
- 忙则等待
- 有限等待
- 让权等待(当一个进程不能进入自己的临界区时,则释放处理器给其他进程)
经典同步问题:
- 生产者-消费者问题:设置一个空缓冲区数目,一个满缓冲区数目,一个互斥信号量。
- 读者-写者问题
- 哲学家进餐问题:分成奇数号和偶数号,奇数号的哲学家先拿左边筷子,然后拿右边筷子;偶数号的哲学家则相反
- 理发师问题:把店内的所有椅子看做一个变量,只要有空椅子就留下,没有就离开。
死锁:产生原因是几个进程因竞争系统资源或相互通信而处于永久阻塞状态。
根本原因:竞争资源 重要原因:进程推进顺序不当
处理死锁的四种方法:
- 鸵鸟算法:对死锁视而不见
- 预防死锁:设置限制条件,破坏产生死锁的4个必要条件之一或几个
- 避免死锁:资源动态分配过程中,用某种方法防止系统进入不安全状态,比如不给某个进程分配资源。
- 检测和解除死锁:采取措施解除死锁,比如剥夺某个进程的资源。
饿死:因为等待时间过长而饿死,比如在优先级分配算法中,不断的有高优先级的进程产生,则低优先级的进程总是分配不到处理器,则会饿死。 饿死是有机会分配到处理器,只是时间比较长,而死锁是相互缺乏资源不能分配处理器。
章节三:内存管理
- 内存管理基础
-
- 连续分配管理方式
- 非连续分配管理方式 分页管理方式,分段管理方式,段页式管理方式
- 虚拟内存管理 其实就是在磁盘上开辟一个空间作为缓冲区,事先把需要的资源放在缓冲区里
-
- 页面置换算法有:最佳,先进先出,最近最少使用,时钟 置换算法
内存管理是指由于计算机所有的运行程序都是要放在内存条上才能运行的,但是内存条属于紧缺资源,所以得合理利用,通过合理的分配算法并设置虚拟内存的方法来扩充内存大小。
连续分配管理方式:
- 单一连续分配
- 固定分区分配
- 动态分区分配
内部碎片和外部碎片:内存被分成各个分区,内存中分区里没有被利用的碎片是内部碎片,在内存中没有被利用的是外部碎片。
如:分片管理—固定分区(将内存分成固定大小的多个分区)—有内部碎片
分段管理—动态分区(要用多大的内存空间就开辟多大的)----最终整个内存中会剩余比如20MB,而任何进程所需要的都不止20MB,从而这20MB就是外部碎片。
非连续分配管理方式:
- 基本分页存储管理方式:将用户作业分成若干个大小相等的页,内存分成与页面大小相等的块,在为作业分配内存时,以块为单位分配。作业调度时必须一次性将所有页面调入内存。
- 优点:1,内存利用率高 2,实现了离散分配 3,便于存储访问控制 4,无外部碎片
- 缺点:1,需要硬件支持(尤其是快表,快表指的是指定作业页号和内存物理块号的对应表) 2,内存访问效率下降 3,共享困难 4,内部碎片
- 基本分段存储管理方式:将用户作业分成若干个逻辑分段,每个分段都是一组完整的逻辑信息集合。每次将一个逻辑分段调入内存中,但不要求每段都连续。
- 优点:1,便于程序模块化处理和处理变换的数据结构 2,便于动态链接和共享 3,无内部碎片
- 缺点:1,与分页类似,需要硬件支持 2,为了满足分段的动态增长和减少外部碎片,需要采用拼接技术 3,分段的最大尺寸受到主存可用空间的限制 4,有外部碎片
- 段页式管理方式:先将用户作业以逻辑结构分成若干个逻辑分段,再将每一个逻辑分段分成若干大小固定的页;而内存还跟分页存储一样分成若干个大小相同的物理块,对内存的分配以物理块为单位。
注意:不管是连续分配管理还是非连续分配管理,都是一次性将用户作业都放入内存中,这样很难满足一些大型的用户作业,有可能用户作业不能全部调入内存,那就阻塞了。
虚拟内存管理
面对大型的用户作业,无法一次性全部调入内存的情况下,那就得引入虚拟内存了。因为用户作业中有些程序是不频繁使用的,所以可以先放在外存上,当需要的时候再调入内存。这就利用的是局部性原理。
局部性原理:大多数程序在执行时,在一个较短的时间内仅使用程序代码的一部分,程序所访问的存储空间也是局限于某个区域。
请求分页存储管理方式:
利用上面讲到的基本分页存储管理方式将用户作业分页,然后利用虚拟内存管理技术,先将程序部分调入内存,其他的当需要的时候再从外存中调入。
请求分页 = 基本分页 + 请求调页功能 + 页面置换功能
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
68910224b259a5ffe804fa6d0db.png)
[外链图片转存中…(img-y7SFPepT-1715622067707)]
[外链图片转存中…(img-I2xjsB6O-1715622067707)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新