专栏首页C/C++基础操作系统简介

操作系统简介

操作系统(Operating System,OS)是计算机系统组成要素,是管理和控制计算机硬件与软件资源的基本软件。操作系统是用户和计算机交互的接口,也是计算机硬件和其他软件交互的接口。操作系统为用户提供各种形式的用户界面,比如Windows的图形用户界面(Graphical User Interface,GUI),Linux的命令行交互Shell。此外,为其它软件的开发提供必要的服务和相应的接口等。操作系统管理着计算机硬件资源,同时按照应用程序的资源请求,分配资源,如划分CPU时间、内存空间的开辟、调用打印机等。

通俗来讲,操作系统之于计算机,如同思想之于躯体,没有操作系统的计算机,就像没有思想的躯体,犹如行尸走肉。操作系统的主要功能是资源管理,就像我们的思想,主要功能是操控我们的躯体,完成日常行为。操作系统的细分功能主要包括如下几点:

1.处理器管理

计算机一般同时运行着多个应用程序,需要同时占用有限的处理器资源,操作系统以进程为单位,对处理器进行分配和调度,保证多个程序有条不紊的运行。 (1)进程控制 在多程序运行的环境下,每个作业被划分为一个或多个进程,操作系统为每个进程分配必要的资源。当进程结束后,回收分配给进程的资源。进程控制的主要内容是为作业创建进程、撤销已结束的进程,以及控制进程在运行过程中的状态转换。现代OS,进程的控制以线程为基本单位,即进程由一个或若干个线程构成。

(2)进程同步 进程以异步方式运行,如果多个进程间存在联系,需要对进程进行同步。假设完成一个作业需要进程A和B,二者需要对临界资源进行访问时,此时需要控制A和B对临界资源进行独占。再比如进程B需要在进程A之后结束,此时进程B需要等待进程A先结束后再结束。所以,进程同步的主要任务是为多个进程(含线程)的运行进行协调,有两种协调方式: (a)进程互斥方式。指诸进程(线程)在对临界资源进行访问时,采用互斥方式,同一时刻,临界资源只能被一个进程(线程)独占。 (b)进程同步方式。指对相互合作完成共同任务的诸进程(线程)间,对它们的执行次序加以协调。 为了实现进程同步,系统中必须使用一定的同步机制。实现进程互斥的机制,常用的是为每一个临界资源配置一把锁W,当锁打开时,进程(线程)可以对该临界资源进行访问;而当锁关上时,则禁止进程(线程)访问该临界资源。实现进程同步的最常用的机制则是信号量机制。

(3)进程通信 为快速完成一个任务,一般会为任务建立多个进程,为每个进程创建多个线程,这些进程(线程)相互合作共同完成一个任务,而这些进程往往需要交换信息,此时就需要完成进程间的通信。比如一个任务由进程A和进程B共同完成,进程B需要对进程A的结果做进一步处理,此时需要完成进程A和B之间的通信,由进程B从进程A获取需要的数据。常见的进程间通信方式有:管道(Pipe)、命名管道(FIFO)、信号(Signal)、消息队列(Message Queue)、共享内存(Shared Memory)、信号量(Semaphore)和套接字(Socket)。

(4)调度 计算机系统在处理多个作业时,每个作业需要经过调度才能执行。调度分为作业调度和进程调度。 (a)作业调度。从后备队列中按照一定的算法,选择出若干个作业,为它们分配运行所需资源。调入内存后,为它们建立进程,并是进程处于就绪状态,并按照一定的算法将它们插入就绪队列。 (b)进程调度。从进程的就绪队列中,按照一定的算法选出一个进程,分配处理机使之运行。现代OS,一般将线程作为基本的调度单位。

2.内存管理

为满足多道程序运行环境下对内存的要求,内存管理需要完成内存分配、内存保护、地址映射和内存扩充等功能。 (1)内存分配指为每道程序分配所需的内存空间,并满足程序动态申请内存的需求。

(2)内存保护的主要任务是确保每道用户程序都只在自己的内存空间运行,彼此互不干扰。绝不允许用户程序访问操作系统的内存空间,也不允许用户程序转移到非共享的其它内存空间中执行。实现内存保护,一个较为简单内存保护机制是设置两个界限寄存器,分别存放程序内存空间的上界和下界。系统须对每条指令所要访问的地址进行检查,如果发生越界,便发出越界中断请求,以停止该程序的执行。

(3)地址映射。应用程序地址都是从“0”开始的,程序中其它地址都是相对于起始地址计算的。由这些地址所形成的地址范围称为“地址空间”,也叫作应用程序“逻辑地址”或“相对地址”。此外,由内存中的一系列单元所限定的地址范围称为“内存空间”,为“物理地址”。在多道程序环境下,每道程序不可能都从“0”地址开始,导致程序的逻辑地址和内存的物理地址不一致。为使程序能正确运行,存储器管理必须提供地址映射功能,将逻辑地址转换为对应的物理地址。

(4)内存扩充。内存容量由于成本原因,容量有限,在内存容量不足的情况下,需要对内存进行扩充。这里的内存扩充不是扩充物理内存的容量,而是借助于虚拟内存计数,从逻辑上扩充内存容量。为了能在逻辑上扩充内存,系统必须具有内存扩充机制,用于实现 下述各功能: (a)请求调入功能。应用程序在载入部分数据的情况下,启动运行,运行过程中,发现所需和数据尚未装入内存,向OS发出请求,由OS从磁盘中将所需数据调入内存,继续运行。 (b)置换功能。调入数据时内存不足,系统将内存中一部分暂时不用的数据置换到磁盘,腾出内存空间,完成调入。

3.设备管理

设备管理的主要任务是分配和回收外部设备以及控制外部设备按用户程序的要求进行操作,需要响应用户程序的I/O请求、提高CPU和I/O设备的利用率,提高I/O速度。为实现上述目标,需要具有缓冲管理、设备分配和设备处理以及虚拟设备等功能。

缓冲管理指的是利用缓冲区来缓和CPU与I/O设备速度不对等的矛盾,可有效的提高CPU利用率和系统性能。

设备分配的基本任务是根据用户进程的I/O 请求、系统现有资源情况以及按照某种设备的分配策略,为之分配其所需的设备。如果在I/O 设备和CPU 之间还存在着设备控制器和I/O 通道时,还须为分配出去的设备分配相应的控制器和通道。

设备处理指的是实现CPU和设备控制器之间的通信,由设备处理程序(设备驱动程序)来完成,即由CPU 向设备控制器发出I/O 命令,完成指定的I/O 操作;反之,由CPU接收从控制器发来的中断请求,并给予迅速的响应和相应的处理。

4.文件管理

文件管理是操作系统的基本功能者之一,由文件系统来完成创建文件、撤销文件、读写文件、打开和关闭文件等功能,此外,还需要提供文件存储空间管理、目录管理以及文件共享与保护等功能。

文件存储空间管理指的是对磁盘空间的管理,为减少磁盘碎片,提高存储空间利用率,以块为单位对磁盘进行管理。目录管理,主要管理目录下文件名、文件属性以及文件在磁盘的物理位置等。文件共享与保护通过文件的权限来实现。

5.操作系统接口

操作系统为实现用户与计算机的交互,提供了一系列系统接口。系统接口分为两类: (1)用户接口。普通用户通过系统提供的用户接口获取系统服务; (2)程序接口。供开发用户在编程时调用,获取系统服务。

用户接口主要分为图形用户接口和命令行用户接口。比如通过Shell,执行相关命令,获取想要的结果。

程序接口,是操作系统内核对外提供的函数接口,又称为系统调用。供应用程序使用,完成与操作系统的交互。

应用程序,除了使用系统调用完成特定功能,最常使用的是标准库函数。标准库函数是对系统调用的进步封装。以Linux为例,应用程序、Shell、标准库函数、系统调用和内核的关系大致如图所示。


参考文献

[1]计算机操作系统.汤小丹

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Linux命令(37)——free命令

    free命令用于显示系统内存使用情况,包括物理内存(Physical Memory)、虚拟内存(Swap Memory)、共享内存(Shared Memory)...

    Dabelv
  • Linux 命令(77)—— killall 命令

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    Dabelv
  • *** glibc detected *** malloc(): memory corruption

    在Linux Server上不好模拟出来:不过若是先malloc,再越界memset,再free此内存块,然后malloc新内存块就会出现类似错误。

    Dabelv
  • .NET面试题系列[16] - 多线程概念(1)

    这篇文章主要是各个百科中的一些摘抄,简述了进程和线程的来源,为什么出现了进程和线程。

    s055523
  • 美团云计算方面面试题

    三哥
  • Android 中进程的级别以及 Service 的优先级

    总结: 我们已经知道有这 5 个进程了,并且他们的优先级都列出来的,这样我们就可以根据优先级来让我们的 APP 尽量不被杀死了。

    开发者
  • 1.并发编程多进程(理论部分)

    ​ 太白金星在一个时间段内有很多任务要做:python备课的任务,写书的任务,交女朋友的任务,王者荣耀上分的任务,  

    changxin7
  • 操作系统核心原理-3.进程原理(上):进程概要

    进程管理、内存管理和文件管理是操作系统的三大核心功能,那么什么是进程呢?顾名思义,进程就是进展中的程序,或者说进程是执行中的程序。当一个程序被加载到内存之后就变...

    Edison Zhou
  • node中创建服务进程

    背景 在node工程部署中,常常涉及到三方:本地客户端、跳板机和服务器(集群)。在通过git触发gitlab hook脚本后,需要在跳板机中执行相应的ssh命令...

    欲休
  • 僵尸进程的问题

    1、僵尸进程的产生 在AIX操作系统实施的进程结构中,每一个进程都有一个父进程。当一个进程结束时会通知它的父进程,从而该进程的父进程会收集该进程的状态信息。若...

    李海彬

扫码关注云+社区

领取腾讯云代金券