多线程预备知识-----操作系统

前言:为准备本文:特地把大学的操作系统的书拿出来翻了几页。

分时与多道批处理系统

由于最早的计算机只支持单道系统,即处理完一个作业之后才会处理下一个作业,这样由于在处理一个程序的过程中,其他程序需要等待这个程序完成之后才能进入到CPU内执行,而在这段时间内,其他的设备都处于等待状态,就造成了资源的浪费。随着操作系统的发展,慢慢发展出了多道批处理操作系统和分时操作系统。

  • 多道批处理操作系统:为了进一步提高资源的利用率和系统的吞吐量,引入了多道批处理程序。用户所提交的作业先存放在外存上,并且排成一个队列,然后作业调度按一定的算法(作业调度的算法后面再说),从这个队列中选择若干个作业调入内存,使它们可以使用CPU和其他的资源。由于在内存中有多个程序,因此可以在运行程序A时由于等待IO操作而造成的CPU空闲可以用于调度程序B来执行。这样可以使得系统的连续性提高,所有的资源都能得到最大化的利用。虽然分时系统大幅度提高了资源的利用率,但是也带来一个问题,就是由于作业队列是放在外存中然后再调度,由于程序在外存中是无法运行的,所以当程序员提交了程序之后,直到程序的完成之前,用户都不能与自己的程序进行交互。
  • 分时系统:为解决多道批处理的弊端,此时引入了一个新型的OS系统————分时系统,分时系统有一个很大的特征就是作业队列是直接进入内存中的,如果像之前那样,内存队列是在外存中,那么用户的命令将无法作用到自己在内存的作业上。因此分时系统解决了人机交互性。而分时系统最大的特点就是,采用轮转的运行方式,引入了时间片的概念,规定每个作业都只能运行一个时间片,在时间片用完之后,就暂停运行,立即调度给下一个作业运行,以时间片为单位,轮流为每个作业服务。这个时间片的概念非常重要,以后的各种多线程程序都是基于这个时间片的思想。

进程和线程

  • 进程:进程是在操作系统中能够独立运行,并且作为操作系统资源分配的基本单位,是由一堆的指令和数据组成的,是一个可以独立运行的活动实体。换句话说操作系统分配资源都是分配给进程的,然后再由进程分配给线程,并且每个进程的资源都是相互独立的,而线程则共享所属进程的所有的资源
  • 线程:线程是在进程之下,可以调用本进程的所有资源,作为独立调度和程序执行的基本单位。一个进程可以有多个线程,执行程序时,实际上执行的是一系列的线程。

举个例子就是:就拿QQ来说,你可以同时运行QQ,微信,浏览器等多个程序,这些个程序就相当于一个进程,而QQ中的你打开每一个聊天窗口,就相当于在QQ这个进程中开启了多个线程,并在这个线程内切换跟不同的人聊天。并且,不仅进程具有并发性,线程也同样具有并发性。

操作系统的基本特征

操作系统有四个基本特性:并发,共享,虚拟和异步。其中并发和共享是操作系统两个最基本的特征,由于是多线程系列的预备知识,因此,只讲一下并发和共享

  • 并发:说到并发就不得不提一下并行,并发和并行两个概念是经常被拿来讲的,可以说是相似但是又有区别的两个概念

    • 并行:并行指的是两个或以上事件在同一时刻发生,你和小红同时在食堂吃饭,这就叫做并行
    • 并发:并发指的是两个或以上事件在同一时间间隔内发生,只有一把勺,而且勺子的使用时间每个人都是一样的,因此你和小红只能轮流使用勺子,这就叫做并发

    但是放在操作系统层面,由于CPU的处理速度非常快,我们是感知不到时间片的轮换,因此在宏观上他们好像是一起执行,但是微观上实际上是分时交替的运行

  • 共享:操作系统中的共享可以理解成资源复用,是指系统中的资源可供内存中多个并发执行的线程共同使用,这个共享则是建立在操作系统的调度上,因为存在资源的竞争,而调度则是建立在上面所说的分时和多道处理的基础上。举个通俗的例子,在只有一个勺子而人又很多的情况下,如何分配这个勺子,每个人使用时间多长,是否要根据每个人的饥饿情况的不同优先给较饿的人先用勺子吃饭,这就涉及到了资源调度的问题,这也是操作系统中最重要的问题之一。而在操作系统的共享方式中,又可以分为互斥共享和同时访问:互斥共享是指对于某些资源,一般称为临界资源或者互斥资源,例如打印机等,只允许一个进程访问,当A进程访问的时候,其他进程都不允许访问这个资源,直到A使用完毕。共享访问就是那些可以同时访问的资源,例如磁盘的一些资源,歌曲,小说等等,

原文地址:https://www.cnblogs.com/blackmlik/p/12790577.html