【操作系统基础知识 一】操作系统基本原理

简介: 【操作系统基础知识 一】操作系统基本原理

学生时代没有好好学习操作系统,悔不当初,现在重新捡起来看看,才发现日常有很多事情都可以解释了,例如为什么Linux快!并发是什么?操作系统到底干啥活,这篇blog是王道的学习笔记:

  • 操作系统基本概念,操作系统是干嘛的,提供什么服务,例如处理器管理【进程管理】、存储器管理【内存管理】、文件管理、设备管理【IO管理】
  • 操作系统的基本特征并发、共享、虚拟、异步,有了这些基本特征,操作系统才能提供如上的服务
  • 操作系统的发展历程,历史的变迁,纸带机时代、批处理时代、分时操作时代、实时操作时代
  • 操作系统的体系结构,非内核的GUI,内核的系统调用部分:进程管理、存储管理、设备管理,以及内核更底层的直接与硬件交互的时钟管理、中断处理、原语,重点介绍中断机制
  • 操作系统的调用,有用户图形界面GUI联机的CMD脱机的BAT批处理命令,还有咱写的代码做的程序调用,提到一个重点概念:系统调用

操作系统基本概念

什么是操作系统,操作系统是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配,以提供给用户和它软件方便的接口和环境,是计算机系统中最基本的系统软件,总结一下就是:

  1. 操作系统(Operating System,简称 OS)是管理计算机硬件与软件资源的程序,是计算机系统的内核与基⽯,是计算机系统资源的总管理者:处理器管理【进程管理】、存储器管理【内存管理】、文件管理、设备管理【IO管理】
  2. 操作系统本质上是运⾏在计算机上的软件程序
  3. 操作系统为⽤户提供⼀个与系统交互的操作界⾯ ,向上层提供方便易用的服务
  4. 操作系统分内核与外壳(我们可以把外壳理解成围绕着内核的应⽤程序,⽽内核就是能操作硬件的程序)

内核负责管理系统的进程、内存、设备驱动程序、⽂件和⽹络系统等等,决定着系统的性能和稳定性。是连接应⽤程序和硬件的桥梁。 内核就是操作系统背后⿊盒的核⼼

操作系统基本特征

操作系统是一种系统软件,但与其他的系统软件和应用软件有很大的不同,他有自己的特殊性即基本特征,操作系统的基本特征包括并发、共享、虚拟和异步。并发性是之后的共享、虚拟和异步的基石。

并发

并发是指两个或多个事件在同一时间间隔内发生,在多道程序环境下,一段时间内宏观上有多个程序在同时执行,而在同一时刻,单处理器环境下实际上只有一个程序在执行,故微观上这些程序还是在分时的交替进行。操作系统的并发是通过分时得以实现的,和串行以及并行的概念区别

  • 串行顺序做不同事的能力:先洗衣服,洗完后做饭。弱鸡。
  • 并发交替做不同事的能力:一会儿洗衣服,一会儿做饭,交替执行,但快如闪电。洗衣服的是一个(cpu)做饭的是一个(cpu),所以多核的情况下会非常快,在同一个时间段内每个cpu各司其职团战。并发的实质是一个物理CPU(也可以多个物理CPU) 在若干道程序之间多路复用,并发性是对有限物理资源强制行使多用户共享以提高效率。
  • 并行同时做不同事的能力:左手洗衣服右手做饭,在同一时刻同时做两件事。单兵王。并行性指两个或两个以上事件或活动在同一时刻发生。在多道程序环境下,并行性使多个程序同一时刻可在不同CPU上同时执行。

核心区别:并发关注的是资源充分利用(也就是不让cpu闲下来),并行关注的是一个任务被分解给多个执行者同时做,缩短这个任务的完成时间(也就是尽快做完这件事),操作系统的并发性是指计算机系统中同时存在多个运行着的程序,因此它具有处理和调度多个程序同时执行的能力。在操作系统中,引入进程的目的是使程序能并发执行。并行则是同时间同时刻有几个程序同时运行,有几核就就几个程序在并行。单核CPU只能并发多个程序,多核CPU可以并发也可以并行【4核CPU可以并行4个程序,程序大于核心时就需要用到并发性】

共享

共享,资源共享即共享,是指系统中的资源可供内存中多个并发执行的进程共同使用。共享可以分为以下两种资源共享方式。

  • 互斥共享方式,系统中的某些资源,如打印机、磁带机,虽然他们可以提供给多个进程使用,但为使所打印的内容不致造成混淆,应规定在同时间段内只允许一个进程访问该资源。为此,当进程a访问某资源时,必须先提出请求,如果此时该资源空闲,系统便可将之分配给进程a使用,伺候若再有其他进程也要访问该资源(只要a未用完)则必须等待。仅当进程a访问完并释放该资源后,才允许另一进城对该资源进行访问。计算机系统中的大所属物理设备,以及某些软件中所用的栈、变量和表格,都属于临界资源,他们都要求被互斥的共享。
  • 同时访问方式,系统中还有一种资源,允许在一段时间内由多个进程“同时”对它进行访问。典型的可供多个进程同时访问的资源是磁盘设备,一些用重入码编写的文件也可以被“同时”共享,即若干个用户同时访问该文件。

以上所谓的“同时”往往是宏观上的,而在微观上,这些进程可能是交替的对该资源进行访问即“分时共享”,并发和共享是操作系统两个最基本的特征,这两者之间又是互为存在条件的:1资源共享是以程序的并发为条件的,若系统不允许程序并发执行,则自然不存在资源共享的问题【QQ和微信如果不能并发同一时间只有一个资源也无需共享】;2若系统不能对资源共享实施有效地管理,也必将影响到程序的并发执行,甚至根本无法并发执行【QQ和微信如果不能共享则不能读取文件】。

虚拟

虚拟是指把一个物理上的实体变为若干个逻辑上的对应物。物理实体是实的,即实际存在的;而后者是虚的,是用户感觉上的事物。相应的,用于实现虚拟的技术,成为虚拟技术。在操作系统中利用了多种虚拟技术,分别用来实现虚拟处理器、虚拟内存和虚拟外部设备

  • 虚拟处理器:在虚拟处理器技术中,是通过多道程序设计技术,让多道程序并发执行的方法,来分时使用一台处理器的。此时,虽然只有一台处理器,但他能同时为多个用户服务,是每个终端用户都认为是有一个中央处理器在为他服务。利用多道程序设计技术,把一台物理上的CPU虚拟为多台逻辑上的CPU,称为虚拟处理器。时分复用技术
  • 虚拟存储器:可以通过虚拟存储器技术,将一台机器的物理存储器变为虚拟存储器,一边从逻辑上来扩充存储器的容量。当然, 这是用户所感觉到的内存容量是虚的,我们把用户所感觉的存储器称为虚拟存储器。空分复用技术
  • 虚拟外设:还可以通过虚拟设备技术,将一台物理IO设备虚拟为多台逻辑上的IO设备,并允许每个用户占用一台逻辑上的IO设备,这样便可使原来仅允许在一段时间内有一个用户访问的设备,变为在一段时间内允许多个用户同时访问的共享设备。

因此操作系统的虚拟技术可归纳为:时分复用技术和空分复用技术

异步

在多道程序环境下,允许多个程序并发执行,但由于资源有限,进程的执行不是一贯到底,而是走走停停,以不可预知的速度向前推进,这就是进程的异步性。异步性使得操作系统运行在一种随机的环境下,可能导致进程产生于时间有关的错误。但是只要运行环境相同,操作系统必须保证多次运行进程,都获得相同的结果

操作系统的发展与分类

操作系统总共有如下几个发展阶段,按照时间线,下一个阶段的操作系统会解决上一个阶段的问题:

  • 1 手工操作阶段用纸带机,单个程序需要排队进入计算机计算,人机速度冲突,慢
  • 2批处理阶段,批处理技术是指计算机系统对一批作业自动进行处理的一种技术。批处理阶段的特点是:用户不用与计算机直接打交道,而是通过专门的操作员来完成作业的输入输出。随着外围设备的迅速发展,后来又出现了脱机批处理系统,即主机直接与磁盘通信。操作系统出现
  • 单道批处理系统,脱机输入输出阶段,用磁带记录程序,然后用磁带读取,监督程序来控制程序读入,监督程序就是操作系统的雏形主要特点:自动性、顺序性、单道性。
  • 多道批处理系统,多道程序设计技术是指在计算机内存中同时存放几道相互独立的程序,它们在管理程序的控制下相互交替的运行。其特征是:多道,宏观上并行,微观上串行。但是不能与用户交互
  • 3 分时操作系统,所谓分时系统就是把处理器的运行时间分成很短的时间片,按时间片轮流把处理器分配给各联机作业使用。若某个作业再分配给他的时间片内不能完成其计算,则改作业暂时停止运行,把处理器让给其他作业使用,等待下一轮再继续运行,由于计算机速度很快,作业运行轮转的很快,给每个用户的感觉好像是自己独占一台计算机。但是不能确定哪个任务紧急,哪个优先级高
  • 4 实时操作系统,实时系统的主要特点是:实时性和可靠性,优先处理

还有一些其他的操作系统,例如网络操作系统和分布式计算机系统,个人计算机操作系统

操作系统体系结构

计算机系统中,通常CPU执行两种不同性质的程序,一种是操作系统内核程序;另一种是用户自编程序或系统外层的应用程序。前者是后者的管理者和控制者,因此“管理程序”要执行一些特权指令,而“被管理程序”出于安全性考虑,不能执行这些指令。所谓特权指令,是指计算集中不允许用户直接使用的指令,如IO指令、中断指令。操作系统在具体实现上划分了用户态和核心态,以严格区分两种类程序。

内核是计算机上配置的最底层软件,是计算机功能的眼神。不同系统对内核的定义稍有区别,大多数操作系统内核包括四个方面的内容

  • 最底层与硬件关联交紧密的模块,诸如时钟管理程序中断处理程序设备驱动程序等处于最底层。Linux内核,微内核体系只包含这一部分
  • 其次是运行频率较高的程序,诸如进程管理、存储器管理和设备管理等。基于Linux内核的CentOS、Ubuntu,大内核体系包含底层交互和这一部分

这两部分内容构成了操作系统的内核。它们的指令操作工作在核心态

  • 时钟管理,时钟管理有两个功能:计时,操作系统需要通过时钟管理,向用户提供标准的系统时间;进程切换,在分时操作系统中,采用时间片轮转调度的实现;在实时系统中,按截止时间控制运行的实现;在批处理系统中,通过时钟管理来衡量一个作业的运行程度等。
  • 中断处理,负责实现中断机制,提高多道程序运行环境中CPU的利用率,而且主要是针对外部设备的。后来的到发展,形成了多种类等,成为操作系统各项操作的基础。例如键盘或鼠标信息的输入、进程的管理和调度、系统功能的调用、设备驱动、文件访问等,无不依赖于中断机制。可以说,现代计算机系统是靠中断驱动的软件。
  • 原语,按层次结构涉及的操作系统,底层必然是一些可被调用的公用小程序,他们各自完成一个规定的操作。其特点是:
  • 1.他们处于操作系统的最底层,是最接近硬件的部分
  • 2.这些程序的运行具有原子性——其操作只能一起合成
  • 3.这些程序的运行时间都较短,而且调用频繁。

系统中用来登记状态信息的数据结构很多。比如作业控制块、进程控制块、设备控制块、各类链表、消息队列、缓冲区、空闲区登记表、内存分配表等。为了实现有效地管理 ,系统需要一些基本的操作,常见的操作有以下三种,依据微内核还是大内核体系区分工作在用户态和核心态:

  • 进程管理:进程状态管理、进程调度和分配、创建与撤掉进程控制块的队列维护操作等。
  • 存储器管理:存储器的空间分配和回收管理、内存信息保护程序、代码对换程序等。
  • 设备管理:缓冲区管理、设备分配和回收等。

从上述内容可以了解,核心态指令实际上包括系统调用类指令和一些针对时钟、中断和原语的操作指令。

用户态和核心态

根据进程访问资源的特点,我们可以把进程在系统上的运⾏分为两个级别:

  1. ⽤户态(user mode) : ⽤户态运⾏的进程或可以直接读取⽤户程序的数据。
  2. 核心态(kernel mode):可以简单的理解核心态运⾏的进程或程序⼏乎可以访问计算机的任何资源,不受限制

用户态和核心态的调用切换是需要CPU切换的,是会消耗资源的。

特权指令

所谓特权指令是指有特殊权限的指令,由于这类指令的权限最大,如果使用不当,就会破坏系统或其他用户信息。为了保证系统安全,这类指令只能用于操作系统或其他系统软件,不直接提供给用户使用,主要用于系统资源的分配和管理,包括改变系统的工作方式,检测用户的访问权限,修改虚拟存储器管理的段表、页表等。在某些用户的计算机系统中,为了统一管理各种外部设备,输入输出指令也作为特权指令,不允许用户直接使用。需要输入输出操作时,必须通过系统调用,经由操作系统完成

为了防止用户系统中使用特权指令,用户态下只能使用除特权指令以外的指令,核心态下可以使用全部指令。所以把用户程序放在用户态下进行,而操作系统中必须使用特权指令的那部分程序在核心态下运行,保证了计算机系统的安全可靠。从用户态转换为核心态的唯一途径就是终端或异常

大内核和微内核

大内核例如Linux、Unix系统,包含底层硬件交互的:原语、时钟管理、中断和系统调用类指令【进程管理、存储器管理、设备管理】等功能:

  • 优点:高性能,CPU不需要频繁的切换用户态和内核态
  • 缺点:包含模块多,内部结构混乱,不易维护

微内核例如windows系统,只包含底层硬件交互的:原语、时钟管理、中断部分模块,其它系统调用类指令都在用户态

  • 优点:包含模块少,内部结构清晰,容易维护
  • 缺点:需要频繁在核心态和用户态之间切换CPU,性能低

CPU的状态转换是有成本的,所以频繁切换对性能有很高的影响

操作系统的中断

中断是让操作系统从应用程序手中夺回CPU控制权的唯一方式

  • 内中断:内中断、例外或陷入。指源自CPU执行指令内部的时间,如程序的非法操作码、地址越界、算数溢出、虚存系统的缺页以及专门的陷入指令等引起的时间。对异常的处理一般要依赖与当前程序的运行现场,而且异常不能被屏蔽,一旦出现异常立即处理
  • 外中断:与当前CPU执行的指令无关,指令来自CPU执行指令以外的事件发生,例如时钟中断IO中断

时钟+外中断组合起来是分时复用CPU的基石,中断处理依赖中断向量表,当中断发生时找到对应中断向量表确认执行哪种中断。

操作系统的调用

调用操作系统,也就是和操作系统交互一般有如下四种调用方式,区分为用户直接调用软件/程序员间接调用,用户有三种直接和操作系统交互的方式,

  • GUI用户图形界面,也就是window可视化的操作系统
  • 联机命令接口,也就是我们的CMD小黑窗,可以一行行的敲的即时指令
  • 脱机命令接口,也即批处理命令接口,我们安装的服务器,经常能看到的bat格式的文件,就是一批指令的集合文件

软件/程序员有一种方式可以调用

  • 程序接口:通过写代码进行调用,例如我们使用C语言使用的库函数printf,而printf的实现调用了操作系统的相关接口,调集了显示器内存等资源最终把内容打印在屏幕上

调用这里有一些区分,在程序接口调用的时候有一个概念叫做系统调用

系统调用

我们运⾏的程序基本都是运⾏在⽤户态,如果我们调⽤操作系统提供的核心态级别的⼦功能,就需要系统调⽤了

在我们运⾏的⽤户程序中,凡是与共享资源有关的操作(如⽂件管理、进程控制、内存管理、文件管理等),都必须通过系统调⽤⽅式向操作系统提出服务请求,并由操作系统代为完成。这些系统调⽤按功能⼤致可分为如下⼏类:

  • 设备管理。完成设备的请求或释放,以及设备启动等功能。
  • ⽂件管理。完成⽂件的读、写、创建及删除等功能。
  • 进程控制。完成进程的创建、撤销、阻塞及唤醒等功能。
  • 进程通信。完成进程之间的消息传递或信号传递等功能。
  • 内存管理。完成内存的分配、回收以及获取作业占⽤内存区⼤⼩及地址等功能。

这样可以保证系统的稳定性和安全性。系统调用有以下流程:

  • 执行传参指令,将系统调用需要参数传递,发现特权指令
  • 执行陷入指令,引发内中断,因此转入内中断相应处理程序,也就是系统调用入口
  • CPU切换到核心态
  • 依据参数执行系统调用,执行特权指令,执行完成
  • CPU转回用户态

系统调用结束,可以看的出,这里用到了内中断

相关文章
|
4天前
|
运维 算法 安全
深入理解操作系统的内存管理:原理与实践
【4月更文挑战第25天】 在现代计算机系统中,操作系统扮演着至关重要的角色,它负责协调和管理硬件资源,为上层应用提供必要的服务。其中,内存管理是操作系统的核心功能之一,它不仅关乎系统性能,也直接影响到系统的稳定性和安全性。本文将深入探讨操作系统内存管理的关键原理,包括虚拟内存、物理内存分配、分页机制以及内存保护等,并结合Linux操作系统实例,分析其内存管理的实现细节。通过理论与实践的结合,旨在为读者提供一个全面、深入的操作系统内存管理视角。
|
4天前
|
算法 调度 UED
深入理解操作系统内存管理:原理与实践
【4月更文挑战第23天】 在现代计算机系统中,操作系统的内存管理是保证系统高效、稳定运行的关键组成部分。本文旨在深入探讨操作系统中内存管理的理论基础、关键技术以及实际操作过程,通过对内存分配策略、虚拟内存技术、分页与分段机制等核心概念的详细解析,为读者提供一个清晰、全面的内存管理视角。此外,文章还将通过案例分析,展示内存管理在解决实际问题中的应用,以期加深读者对操作系统内存管理复杂性的认识和理解。
|
1天前
|
算法 程序员 内存技术
深入理解操作系统内存管理:原理与实践
【5月更文挑战第18天】 在现代计算机系统中,操作系统扮演着关键角色,其中内存管理作为其核心功能之一,保障了系统资源的高效利用和程序的顺利运行。本文旨在探讨操作系统内存管理的基本原理及其在实际中的应用,涉及物理内存的组织、虚拟内存技术的实现以及内存分配策略等关键技术点。通过分析不同内存管理机制的优势与局限,我们将对操作系统如何协调多任务环境下的内存使用有更深刻的认识。
|
1天前
|
存储 缓存 算法
深入理解操作系统内存管理:原理与实践
【5月更文挑战第17天】 本文旨在探讨操作系统中的内存管理机制,通过分析其核心原理及提供实际应用场景,帮助读者深化对操作系统内存管理的认识。文章首先介绍内存管理的基础知识,然后详细阐述连续分配与非连续分配策略,接着讨论分页和分段机制,并探索虚拟内存技术如何使得内存管理更加高效。此外,文中还将涉及内存优化技巧以及现代操作系统中内存管理面临的挑战。
|
4天前
|
存储 算法 Linux
深入理解操作系统内存管理:原理与实践
【5月更文挑战第14天】 在现代计算机系统中,操作系统的内存管理是确保系统高效稳定运行的关键组成部分。本文将详细探讨操作系统内存管理的基本原理,包括虚拟内存的概念、物理内存与进程地址空间的映射机制、以及分页和分段技术的具体实现。此外,文章还将介绍内存分配策略、内存碎片问题及其解决方案,以及现代操作系统中采用的高级内存管理特性,如Linux内核的内存管理子系统。通过理论分析与实际案例相结合的方式,旨在帮助读者深入理解并掌握操作系统内存管理的核心知识。
|
4天前
|
Ubuntu Unix Java
【操作系统原理】—— 文件系统编程
【操作系统原理】—— 文件系统编程
7 0
|
4天前
|
存储 Linux 程序员
【操作系统原理】—— Linux内存管理
【操作系统原理】—— Linux内存管理
8 0
|
4天前
|
Ubuntu Linux C语言
【操作系统原理】—— 信号量与PV操作实现
【操作系统原理】—— 信号量与PV操作实现
8 0
|
4天前
|
消息中间件 安全 Ubuntu
【操作系统原理】—— 线程同步
【操作系统原理】—— 线程同步
15 1
|
4天前
|
算法 Ubuntu Linux
【操作系统原理】—— 进程调度
【操作系统原理】—— 进程调度
7 0