操作系统基础要点摘记

本文详细介绍了操作系统的基础知识,包括进程与线程的区别、并发与并行的概念、虚拟技术、系统调用、中断和异常、内存管理和调度算法。特别讨论了进程的创建、状态转换、同步与通信、死锁问题以及文件系统和I/O设备管理。还涉及了系统调用、库函数以及它们在进程中的作用。文章最后提到了静态库和动态库的区别及其在内存管理中的影响。
摘要由CSDN通过智能技术生成

概述

  1. 相对路径--相对于进程的工作目录。
  2. windows中不存在父子进程层次,创建\被创者身份平等。
  3. 被并发的进程共享的资源可以是互斥\同时共享,互斥共享的资源称为临界资源。
  4. 并发--一段时间内多个任务被轮流处理,切换很快,单核处理器,并行--某一时刻多个任务,多核或多个处理器支持。
  5. 虚拟技术:时分\空分复用
  6. 异步IO:系统调用后,调用者不阻塞进程,而是立马返回,系统调用完成后,通过状态、通知、回调来通知调用者。并发时的异步:走走停停,以不可知的速度向前推进。
  7. 操作系统功能:1.自上为用户程序提供抽象接口,自下管理物理硬件2.管理计算机资源(对用户程序透明)3.可以说运行在内核态的程序就叫操作系统。

体现在进程(通信、控制)\内存地址空间分配\文件\设备管理

  1. 进程在用户态需要内核态的功能,就进行系统调用陷入内核,由操作系统代为完成

系统调用和函数调用

系统中的共享资源都由OS内核统一管理,保证系统的稳定性和安全性,防止用户随意修改系统重要数据系统调用就是操作系统所提供的用户程序中可以调用的接口运行在内核态在用户程序中,凡是与资源有关的操作按照功能可分为:内存分配、进行I/O设备传输管理文件进程控制、进程通信)都必须通过系统调用方式向操作系统提出服务请求,并由操作系统代替它完成。通常,一个操作系统提供的系统调用有几十个乃至上百个之多。

函数将常用的代码块编写放入文件中,形成可重用的模块,编写应用程序时调用,由第三方提供,运行在用户态/用户地址空间

在移植性方面,不同操作系统的系统调用一般是不同的,移植性差;库函数移植性相对好一点。比如说在所有的ANSI C编译器版本中,C库函数是相同的。调用开销方面,系统调用需要在用户态和内核态切换CPU上下文环境,开销较大,库函数调用开销较小。

另一种OS提供的含有系统调用库函数一般是多个系统调用的封装方便了用户程序的调用可以实现更多的功能用户程序一般是调用它间接使用系统调用,用C定义接口,如与对应系统调用重名的read()读磁盘上文件

调用的过程是函数参数压到上,然后执行到函数内系统调用OS将它的唯一编号放入寄存器然后执行指令trap(执行int $0x80)产生中断进入内核OS查询中断向量表,调用对应中断的服务程序,服务程序将系统调用编号拿出对照操作系统一直维护的系统调用表找到该系统调用程序体的内存地址访问该地址执行系统调用。执行完毕后返回库函数,库函数负责检查系统调用的执行情况,根据检查的结果返回相应的值。

这里trap指令产生一个陷入中断并且是软中断(软件发出,不会直接中断CPU)系统调用可当做一个中断处理函数中断机制切换到内核模式来进行调用

库函数一般可以概括的分为两类,一类是随着操作系统提供的,另一类是由第三方提供的。系统提供的库函数把系统调用进行封装或者组合,可以实现更多的功能,也就是上面写的内嵌系统调用的库函数这样的库函数能够实现一些对内核来说比较复杂的操作。比如,read()函数根据参数,直接就能读文件,而背后隐藏的比如文件在硬盘的哪个磁道,哪个扇区,加载到内存的哪个位置等等这些包含了系统调用操作,程序员是不必关心的。而对于第三方的库,它其实和系统库一样,只是它直接利用系统调用的可能性要小一些,而是利用系统库函数来实现功能。

  1. 大内核(单体系统):系统全部功能如文件系统、设备驱动都放进内核,整个操作系统以功能模块的方式编写,链接成一个大型可执行二进制程序,在内核态以单一程序的方式运行,各模块共享信息,性能高,但拓展性差,拓展功能代码需要与内核代码重新编译。

   微内核:在微内核结构下,将一部分操作系统功能模块移出内核,只有最核心的功能内核中,如IPC、地址空间分配,其余模块(即服务,如文件系统、设备驱动)运行在用户态。需要频繁切换性能低,但扩展性好,且不容易因一个功能错误导致系统崩溃(所以只在高可靠性要求场景如军事、工业、航空中流行)。

中断分为外中断(一般就是我们说的中断由cpu执行指令以外的事件引起,如 I/O 完成中断)、异常(内中断,由 CPU 执行指令的内部事件引起,如操作地址越界。)、陷入trap(软中断,在用户程序中使用系统调用引起)。

中断外因引起异常CPU本身原因引起。

中断发生后处理步骤一般是:1.保存CPU环境。2.查询中断向量表。3.调用中断处理服务函数。4.恢复CPU环境。

10. 通常计算机采用的是分时系统,就是系统把CPU时间分成很短的时间片分配给多个进程,让它们轮流共享CPU,各进程占用cpu的时间并非严格限定,如果一个进程需要,可以给它分配更多的时间片,优点是有较强的交互性、多作业并发提高资源利用率。而实时操作系统,计算机及时响应外部事件请求(低优先级任务会被高优先级直接挂起),事件处理必须遵从严格的时间限制与执行顺序,超过时限的进程可能直接被终止,优点是可靠性安全性相对更高,但交互性略差。

 

进程管理

  1. 进程是资源分配和拥有的基本单位,一个进程就是一个正在执行程序的实例,进程有自己的程序(即指令)、虚拟地址空间PCB表项IO设备、输入、输出、运行状态

比如说用户运行自己的程序,系统就创建一个进程,并为它分配虚拟内存空间(虚拟地址空间,包括堆栈指针的指向)、一个控制线程(主线程)IO设备PCB描述基本信息和运行状态该进程放人进程的就绪队列。进程调度程序选中它,为它分配CPU该进程才真正运行

进程切换时先要从用户态切换到内核态,保存当前进程的状态(三态),cpu上下文环境(拥有自己的虚拟cpu,切换进程时老的存入内存,新的装入cpu,一般装的都是PCB里的东西),程序的内存映像程序计数器(保存下一条指令的地址),设置新进程的cpu环境和内存映像,然后切换到用户态,进程切换次数太多降低cpu效率,调度算法需要注意。

进程有cpu密集型\IO密集型,要尽快让IO密集型获取cpu,来保持磁盘的忙碌。

  1. OS维护着一张进程表(进程控制块PCB),描述进程基本信息(其中有各态转换需要保存的信息,从而保证运行时IO中断导致的阻塞结束后能再次就绪)和运行状态,创建、撤销进程都需要对PCB操作
  2. 进程从开始到结束的完整过程(四个)①创建进程、申请空PCB填信息、分配资源、进入就绪态②调度程序的时间片到来,跳转到运行态,用完了继续就绪③请求资源如IO则进入阻塞态等待资源,得到资源时转为就绪态④运行完毕后回收资源、PCB。
  3. 守护进程是一个在后台运行并且不受任何终端控制的特殊进程用于执行特定的系统任务(如处理打印、web页面、电子邮件)很多守护进程在系统引导的时候启动,并且一直运行直到系统关闭。
  4. 进程可能在启动系统、运行的程序(父进程)用系统调用创建、用户请求时被创建,但本质上都是存在的进程创建新进程(如unix中所有进程都属于出现在启动映像中的特殊进程init为根的一颗树)。fork()创建的子进程一开始内存映像和父一样,随后一般执行一个execve()修改并运行新程序,但win中开始就不一样。
  5. 进程可能正常退出、出错退出、被其他进程杀死。

7. 线程CPU调度和分配的基本单位,也是

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值