软件开发搞定操作系统

文章目录

    • 1. 前言
    • 2. 操作系统的演进
    • 3. 操作系统相关概念
    • 4. 进程管理
      • 4.1 进程
      • 4.2 线程
      • 4.3 进程状态
      • 4.4 同步
      • 4.5 Linux进程
    • 5. 作业管理
      • 5.1 进程调度
      • 5.2 死锁
    • 6. 存储管理
      • 6.1 内存分配与回收
      • 6.2 内存回收
      • 6.3 内外碎片
      • 6.4 存储的管理
        • 6.4.1 页式存储管理
        • 6.4.2 段式存储管理
        • 6.4.3 段页式存储管理
      • 6.5 虚拟内存
      • 6.6 Linux存储管理
        • 6.6.1 Buddy内存分配算法
        • 6.6.2 Linux交换空间
    • 7. 文件管理
      • 7.1 文件逻辑结构
      • 7.2 辅存的存储空间分配
        • 7.2.1 辅存分配方式
        • 7.2.2 存储空间管理
      • 7.3 目录管理
      • 7.4 Linux文件
    • 8. 设备管理
      • 8.1 广义的IO设备
      • 8.2 IO设备的缓冲区
      • 8.3 SPOOLing技术

1. 前言

操作系统是管理计算机硬件和软件资源的计算机程序。比如管理配置内存、决定资源供需顺序、控制输入输出设备,提供用户交互等。

操作系统并不局限于存在在计算机,手机也是有操作系统的。常见的操作系统有:Android、iOS、Windos、Linux、MacOS。

我们不可能直接操作计算机硬件,而且像以前的计算机中编写的程序并不是可以在任何计算机上可以运行,所以就需要一个通用的环境,提出了操作系统。有了操作系统,普通人也可以方便使用。

  • 批处理是指用户将一批作业提交给操作系统后就不再干预,由操作系统控制它们自动运行,再输出结果,从而减少作业建立和结束过程中的时间浪费。也就是无需等待人工操作,计算机这时可以自动、成批的执行程序。
  • 批量输入任务。数据可以批量输入到计算机中,但是并不是一次性把批量输入都处理了,早期的计算机的操作系统可以称为单道批处理系统,即内存中只允许存放一个作业。
  • 资源利用率相对于之前有提高。但是一个作业单独进入内存并独占系统资源,直到运行结束后下一个作业才能进入内存,当作业进行I/O操作时,CPU只能处于等待状态,所以CPU利用率还是较低,尤其是对于I/O操作时间较长的作业。

多道程序设计。后来才提出的,此时的操作系统可以称为:多道批处理系统。即在内存中可同时存在若干道作业,说白了就是让批处理系统可以一次性处理多个作业,但其实是快速的穿插运行,使得看起来可以处理多个作业,因此CPU的利用率显著地提高了。

当提到单处理器时实际上指的是并发性,提到多处理器指的是并行性。

解释:

  • 标识符:唯一标识一个进程,用于区别其他进程。
  • 状态:状态一共有三种(运行,等待,阻塞,当然也可以说5种,还有创建和终止)。有一张很重要的进程状态转换图,后续再说。
  • 优先级:表示获得CPU控制权的优先级大小
  • 程序计数器(PC):进程即将被执行的下一条指令的地址。
  • 内存指针:可能是程序代码、或进程数据相关指针。
  • 上下文数据:进程执行时处理器存储的数据。
  • IO状态信息:被进程IO操作所占用的文件列表。像要删除某个文件夹,发现删不了,一看原来是文件夹里面的文件没有关闭,一直占用。
  • 记账信息:进程使用CPU时间、时钟数总和等。

而上面可以总结分成四个种:进程标识符、处理机状态、进程调度信息、进程控制信息。

因为PCB是操作系统进行调度经常被读取的信息,所以PCB是常驻内存的,系统中有专门开辟一块PCB区域来存储所有进程的PCB。

4.2 线程

线程(Thread):是系统进行资源分配和调度的最小单位。进程是由系统分配,线程是由CPU分配,线程包含在进程中的,是进程中实际运行工作的单位,比如计算一个数据,是利用线程来进行计算。一个进程至少有一个线程,每当启动程序就先创建进程再创建一个线程。

一个进程可以并发多个线程,每个线程执行不同的任务。进程中的线程共享进程的资源,比如一个线程计算出的结果可以保存再进程中某个区域,然后另一个线程可以从进程中拿去到这个结果。

总结进程和线程的区别:

4.4 同步

引入生产者-消费者问题:有一群生产者进程在生产产品,并将这些产品提供给消费者进程进行消费,生产者进程和消费者进程可以并发执行,在两者之间设置了一个具有n可缓冲区的缓冲池,生产者进程需要将所生产的产品放到一个缓冲区中,消费者进程可以从缓冲区取走产品消费。

可以代码:

结果不唯一:我的量设置小了,可以设置大点。

上面是我运行几次的结果,错的也有对的也有,这就是线程不同步的表现。

以上的根源问题就是:彼此间没有通信。比如现在仓库为空,生产者没有去通知消费者我目前正在生产,你先别消费,等我生产完再来消费。

线程同步:这个应该是我们听得最多的,进程也有同步那么线程更是有同步,因为进程的线程共享进程资源,像上面的代码案例就是一个线程不同步的表现(异步)。

线程同步的方法:(待详讲)

  • 互斥量
  • 读写锁
  • 自旋锁
  • 条件变量

临界资源:指的是一些虽作为共享资源却又无法同时被多个线程共同访问的共享资源。当有进程在使用临界资源时,其他进程必须依据操作系统的同步机制等待占用进程释放该共享资源才可重新竞争使 用共享资源。像上面的仓库就是一个临界资源。

进程同步:对竞争资源在多进程间进行使用有序的协调,使得并发执行的多个进程之间可以有效使用资源和相互合作。

为了对临界资源进行约束,提出了进程/线程间同步的四个原则

  • 空闲让进:资源无占用,允许使用。
  • 忙则等待:资源有占用,请求进程等待。
  • 有限等待:保证有限等待时间能够使用资源。
  • 让权等待:等待时,进程需要让出CPU。

进程同步的方法:(待详讲)

  • 消息队列
  • 共享存储
  • 信 量

4.5 Linux进程

进程类型:

  • 前台进程:就是具有终端shell,可以与用户交互的进程。
  • 后台进程:没有占用shell,不可以与用户交互的进程。如果要以后台运行,在末尾添加:”&”
  • 守护进程:很多守护进程在系统启动的时候就启动了,一直运行到系统关闭。Linux中,一般以“d”结尾的是守护进程,典型的守护进程有:crond,httpd,sshd,mysqld。

进程ID:唯一标识,ID是一个非负数,最大值由操作系统限定。ID为0的进程为idle进程,是系统创建的第一个进程。ID为1的进程为init进程,是0 进程的子进程,完成系统初始化。init进程是所有用户进程的祖先进程。

linux进程状态:

进程调度的算法:

  1. 先来先服务调度算法:就绪队列中按照谁先来的方式先调度到CPU中
  2. 短进程优先调度算法:调度程序优先选择就绪队列中估计运行时间最短的进程。但是对于较长运行时间的作业的调度非常不公平,有可能永远都没能运行。
  3. 高优先权优先调度算法:进程附带优先权,调度进程优先选择优先权高的进程。这使得紧急的任务可以优先被处理。
  4. 时间片轮转调度算法:按照先来先服务的原则排列就绪队列,每次从队列头部取出待执行的进程,分配一个时间片执行。该算法相对公平,但不能保证及时响应用户。最古老的算法。

除了时间片轮转调度算法属于抢占式的调度,其他三个属于非抢占式的调度。

看道题目:

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年3月19日
下一篇 2020年3月19日

相关推荐