本来今晚是打算搞C++的,但无奈校园网太垃圾了,装个VS17版本的软件到现在还没完成。。。(心累)
想想,写写笔记吧。。。
首先我们要明白一个概念:多任务处理。
多任务处理是指用户可以在同一时间内运行多个应用程序,在此,我们称每一个正在执行的应用程序为一个任务。而我们熟知的linux就是一个支持多任务的操作系统。
这种多任务的操作系统使用某种调度策略能支持多个任务并发执行,补充下:我们知道,单核的处理器在某一时间内只能执行一个任务,每一个任务创建时被分配时间片上,当CPU执行任务时,时间片就会递减(这个道理我相信有些人还是懂的)。操作系统会给当前人任务的时间片用时调度其他任务,特别对于单核的处理器来说,任务会频繁地切换执行,因此会给人多个任务同时运行的感觉。
从本质上看,我们目前的单核CPU还不足做到同一时间内可以执行多个任务,这个现在还是无法实现的;有点类似于人一心不能二用。哈哈哈~
多任务操作系统中通常有3个概念:任务、进程和线程。
一、任务
首先,任务是一个逻辑概念,是指一个软件完成的活动,或者是为实现某个目的的一系列操作。通俗来讲,就是一个任务代表了一个程序的一次运行。注意!是一个程序的一次运行,而不是一个程序,不一样的!
一个任务里面可能包含一个或多个独立功能的子任务,那么这个独立的子任务就是进程或者线程。比如,你玩一个游戏,这可以看成是一个任务;在游戏中,你与敌人“对打”,对方扣血你也扣血,其实这是两个独立的子任务来着对吧?同时,这个游戏还有声音、音效,这又是另外几个独立的子任务在运行了。
二、进程
进程是指一个具有独立功能的程序在某个数据集合上的一次动态执行过程,它是操作系统进行资源分配和调度的基本单元。
每一个进程拥有自己的数据段、代码段和堆栈段。
进程具有并发性、动态性、交互性和独立性。
- 并发指的是系统中的多个进程可以同时并发执行,互不干扰(这里的互不干扰主要指的是物理地址)。
动态性指的是进程具有完整的生命周期和动态的地址空间,它不同于程序,程序是死的,它固定不变。
交互性是指进程在执行的过程中可能会与其他进程发生直接或间接的通信,如进程同步或进程互斥等;于是,我们规定了特定的通信机制来实现进程间的通信。
独立性指的是每一个进程的地址空间是相互独立的,这与前面的并发性息息相关。
(1)进程的类型
主要包含:交互式进程、批处理进程和守护进程
这里概念就不说了,举例子吧。
典型的交互式进程我们接触到的有:shell命令进程、文本编辑器和图形应用程序等;
批处理进程一般都只在后台运行,有:数据库搜索引擎、编译器的编译操作;
守护进程,这名字一听就是“守护”来着,它们一直在后台运行,而且与任何的终端都不关联。它的生命周期算是最长了,这类一般都是系统进程。
(2)进程的结构
三、线程
前面说到,它是操作系统进行资源分配和调度的基本单元。
但由于操作系统在进程间的切换时开销比较大,所以为了提高效率,系统又引入了一个新的概念——线程。
线程有个别名,叫轻量级进程。线程可以对进程的内存空间和资源进行访问,与同一进程中的其他线程共享。注意!这说明了同一个进程内的多个线程它们的物理地址其实是一样的!线程同样也是具有并发性的,可是它的并发性在CPU看来根本就不是并发的,这个道理我相信大家都懂。
互斥锁线程控制
互斥锁只有两种状态:上锁和解锁
信号量线程控制
信号量本质上是一个非负的整数计数器,它用来控制公共资源访问