基础知识补充:操作系统、进程、线程

一:操作系统简述

        操作系统(Operating System,缩写:OS)是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本事务。

        操作系统位于底层硬件与用户之间,是两者沟通的桥梁。用户可以通过操作系统的用户界面,输入命令。操作系统则对命令进行解释,驱动硬件设备,实现用户要求。以现代标准而言,一个标准PC的操作系统应该提供以下的功能:

       1,进程管理(Processing management):
       不管是常驻程序或者应用程序,他们都以进程为标准运行单位。当年运用冯·诺伊曼结构建造电脑时,每个中央处理器最多只能同时运行一个进程。早期的操作系统(例如DOS)也不允许任何程序打破这个限制,且DOS同时只有运行一个进程。现代的操作系统,即使只拥有一个CPU,也可以利用多进程(multitask)功能同时执行多个进程。进程管理指的是操作系统调整多个进程的功能。
       由于大部分的电脑只包含一颗中央处理器,在宏内核(Core)的情况下多进程只是简单迅速地切换各进程,让每个进程都能够运行,在多内核或多处理器的情况下,所有进程通过许多协同技术在各处理器或内核上转换。越多进程同时运行,每个进程能分配到的时间比率就越小。很多操作系统在遇到此问题时会出现诸如音效断续或鼠标跳格的情况(称做颠簸(Thrashing)),一种操作系统只能不停运行自己的管理程序并耗尽系统资源的状态,其他用户或硬件的程序皆无法运行。进程管理通常实践了分时的概念,大部分的操作系统可以利用指定不同的特权档次(priority),为每个进程改变所占的分时比例。特权越高的进程,运行优先级越高,单位时间内占的比例也越高。交互式操作系统也提供某种程度的回馈机制,让直接与用户交互的进程拥有较高的特权值。
       除了进程管理之外,操作系统尚有担负起进程间通信(IPC)、进程异常终止处理以及死锁(Dead Lock)侦测及处理等较为艰深的问题。

       在进程之下尚有线程的问题,但是大部分的操作系统并不会处理线程所遭遇的问题,通常操作系统仅止于提供一组API让用户自行操作或通过虚拟机的管理机制控制线程之间的交互。

       2,内存管理(Memory management):
       根据帕金森定律:“你给程序再多内存,程序也会想尽办法耗光”。大部分的现代电脑存储器架构都是层次结构式的,最快且数量最少的寄存器为首,然后是缓存、存储器以及最慢的磁盘存储设备。而操作系统的存储器管理提供查找可用的记忆空间、配置与释放记忆空间以及交换存储器和低速存储设备的内含物……等功能。
       存储器管理的另一个重点活动就是借由CPU的帮助来管理虚拟位置。如果同时有许多进程存储于记忆设备上,操作系统必须防止它们互相干扰对方的存储器内容。分区存储器空间可以达成目标。每个进程只会看到整个存储器空间被配置给它。CPU事先存了几个表以比对虚拟位置与实际存储器位置,这种方法称为标签页配置。

       借由对每个进程产生分开独立的位置空间,操作系统也可以轻易地一次释放某进程所占据的所有存储器。如果这个进程不释放存储器,操作系统可以结束进程并将存储器自动释放。

       3,用户界面(User interface):

       今日大部分的操作系统都包含图形用户界面(GUI)

       4, 文件系统(File system):
       所谓的文件系统,通常指称管理磁盘数据的系统,可将数据以目录或文件的型式存储
      操作系统拥有许多种内置文件系统。例如Linux拥有非常广泛的内置文件系统,如ext2、ext3、ext4、ReiserFS、Reiser4、GFS、GFS2、OCFS、OCFS2、NILFS与Google文件系统。Linux也支持非原生文件系统,例如XFS、JFS、FAT家族与NTFS。另一方面,Windows能支持的文件系统衹有FAT12、FAT16、FAT32、EXFAT与NTFS。NTFS系统是Windows上最可靠与最有效率的文件系统。其他的FAT家族都比NTFS老旧,且对于文件长度与分区磁盘能力都有很大限制,因此造成很多问题。而UNIX的文件系统多半是UFS
       文件系统都有两种建置方法。系统可以以日志式或非日志式建置。日志式文件系统可以以较安全的手法运行系统恢复。微软的NTFS与Linux的ext3、ext4、reiserFS与JFS都是日志式文件系统。

       每个文件系统都实现相似的目录/子目录架构,但在相似之下也有许多不同点。微软使用“\”符号以创建目录/子目录关系,且文件名称忽略其大小写差异;UNIX系统则是以“/”创建目录架构,且文件名称大小写有差异。

       5,驱动程序(Device drivers):

       所谓的驱动程序(Device driver)是指某类设计来与硬件交互的电脑软件。通常是一设计完善的设备交互接口,利用与此硬件连接的电脑汇排流或通信子系统,提供对此设备下令与接收信息的功能;以及最终目的,将消息提供给操作系统或应用程序。驱动程序是针对特定硬件与特定操作系统设计的软件,通常以操作系统内核模块、应用软件包或普通计算机程序的形式在操作系统内核底下运行,以达到通透顺畅地与硬件交互的效果,且提供硬件在处理异步的时间依赖性接口时所需的中断处理函数。

       6,网络通信(Networking):

       许多现代的操作系统都具备操作主流网络通信协议TCP/IP的能力。也就是说这样的操作系统可以进入网络世界,并且与其他系统分享诸如文件、打印机与扫描仪等资源。

       7,安全机制(Security):略

    操作系统结构图:








       操作系统的分类没有一个单一的标准,可以根据工作方式分为批处理操作系统、分时操作系统、实时操作系统、网络操作系统和分布式操作系统等;根据架构可以分为单内核操作系统等;根据运行的环境,可以分为桌面操作系统,嵌入式操作系统等;根据指令的长度分为8bit, 16bit, 32bit, 64bit的操作系统。

       批处理任务(英语:batch processing),又称批次处理任务,是指在计算机上无须人工干预而执行系列程序的作业。
       批处理任务无须人工交互,所有的输入数据预先设置于程序或命令行参数中。这是不同于需要用户输入数据的交互程序的概念。

       分时操作系统: 在计算机科学中,分时(time-sharing)是对计算机资源的一种共享方式,利用多道程序与多任务处理使多个用户可以同时使用一台计算机
       分时的概念出现于1960年代,在1970年代作为一种杰出的模型引发了计算机历史上的一次重大技术革新。通过在多个用户之间共享计算机资源,此技术极大地降低了计算资源的成本,让个人和组织可以在不实际拥有计算机的情况下使用计算机
       在早期的计算机系统中,计算机处理多个用户发送出的指令的时候,处理的方案即为分时,即计算机把它的运行时间分为多个时间段,并且将这些时间段平均分配给用户们指定的任务。轮流地为每一个任务运行一定的时间,如此循环,直至完成所有任务。这种使用分时的方案为用户服务的计算机系统即为分时系统

       实时操作系统(Real-time operating system, RTOS),又称即时操作系统,它会按照排序运行、管理系统资源,并为开发应用程序提供一致的基础。
       实时操作系统与一般的操作系统相比,最大的特色就是其“实时性”,也就是说,如果有一个任务需要执行,实时操作系统会马上(在较短时间内)执行该任务,不会有较长的延时。这种特性保证了各个任务的及时执行。

       分布式操作系统(Distributed operating system),是一个软件,它是许多独立的,网络连接的,通讯的,并且物理上分离的计算节点的集合。每个节点包含全局总操作系统的一个特定的软件子集。每个软件子集是两个不同的服务置备的复合物。第一个服务是一个普遍存在的最小的内核,或微内核,直接控制该节点的硬件。第二个服务是协调节点的独立的和协同的活动系统管理组件的更高级别的集合。这些组件抽象微内核功能,和支持用户应用程序。
       分布式操作系统是分布式软件系统的重要组成部分,负责管理分布式处理系统资源、控制分布式程序运行等。

       分布式软件系统是支持分布式处理的软件系统,包括分布式操作系统、分布式程序设计语言及其编译(解释)系统、分布式文件系统和分布式数据库系统等。


    多道程序的概念:
       计算机的早期,多任务被称作多道程序(multiprogramming)。多道程序是令CPU一次读取多个程序放入内存,先运行第一个程序直到它出现了IO操作。因为IO操作慢,CPU需要等待。为了提高CPU利用率,此时运行第二个程序。即,第n+1个程序得以执行的条件是第n个程序进行IO操作或已经运行完毕。这种方式每个程序的时间分配是不均等的,很可能第一个程序运行了几个小时而不出现IO操作,故第二个程序没有运行。

二:进程

       用户下达运行程序的命令后,就会产生进程
       进程(process),是计算机中已运行程序的实体。进程为曾经是分时系统的基本运作单位。在面向进程设计的系统(如早期的UNIX,Linux 2.4及更早的版本)中,进程是程序的基本执行实体在面向线程设计的系统(如当代多数操作系统、Linux 2.6及更新的版本)中,进程本身不是基本运行单位,而是线程的容器程序本身只是指令、数据及其组织形式的描述,进程才是程序(那些指令和数据)的真正运行实例。若干进程有可能与同一个程序相关系,且每个进程皆可以同步(循序)或异步(平行)的方式独立运行。现代计算机系统可在同一段时间内以进程的形式将多个程序加载到存储器中,并借由时间共享(或称时分复用),以在一个处理器上表现出同时(平行性)运行的感觉。同样的,使用多线程技术(多线程即每一个线程都代表一个进程内的一个独立执行上下文)的操作系统或计算机架构,同样程序的平行线程,可在多CPU主机或网络上真正同时运行(在不同的CPU上)。
       进程需要一些资源才能完成工作,如CPU使用时间、存储器、文件以及I/O设备,且为依序逐一进行,也就是每个CPU核心任何时间内仅能运行一项进程。

       操作系统使用进程ID来唯一标识每个进程。在一个进程内部,使用进程句柄来标识关注的每个进程


       进程控制块PCB(Process Control Block):

       进程控制块,是操作系统核心中一种数据结构,主要表示进程状态。

       进程状态:可以是new、ready、running、waiting或 blocked等。
       程序计数器:接着要运行的指令地址。
       CPU寄存器:如累加器、变址寄存器、堆栈指针以及一般用途寄存器、状况代码等,主要用途在于中断时暂时存储数据,以便稍后继续利用;其数量及类别因电脑架构有所差异。
       CPU排班法:优先级、排班队列等指针以及其他参数。
       存储器管理:如标签页表等。
       会计信息:如CPU与实际时间之使用数量、时限、账号、工作或进程号码。

       输入输出状态:配置进程使用I/O设备,如磁带机。


三:线程

       线程(thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程"并行"执行不同的任务。
       线程是独立调度和分派的基本单位。线程可以是由操作系统内核调度的内核线程,如Win32线程;由用户进程自行调度的用户线程,如Linux平台的POSIX Thread;或者由内核与用户进程,如Windows 7的线程,进行混合调度。
       同一进程中的多条线程将共享该进程中的全部系统资源,如虚拟地址空间,文件描述符和信号处理等等。但同一进程中的多个线程有各自的调用栈(call stack),自己的寄存器环境(register context),自己的线程本地存储(thread-local storage)。
       一个进程可以有很多线程,每条线程"并行"执行不同的任务;一个进程至少有一条线程,叫主线程(main-thread)
       在多核或多CPU,或支持Hyper-threading的CPU上使用多线程程序设计的好处是显而易见,即提高了程序的执行吞吐率。在单CPU单核的计算机上,使用多线程技术,也可以把进程中负责IO处理、人机交互而常被阻塞的部分与密集计算的部分分开来执行,编写专门的workhorse线程执行密集计算,从而提高了程序的执行效率。


四:并发、并行概念

       串行:是指cpu处理任务的一种方式,任务是一个个排着队执行的,只有当一个任务完全执行完才能执行下一个任务。

       并发:
       单个cpu能在多个任务之间快速切换,一次只执行一个任务,利用多道程序和时分复用技术,从而充分利用cpu,给用户的体验就是多个任务是同时执行的(这里的同时并非真正意义的同一时间)。此时就说这些进程(任务)是并发执行的。

       并行:
       多个cpu能真正实现同时执行多个任务,这些任务是并行执行的。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值