电脑操作系统基础知识多篇

时间:2024-12-07 13:00:54
电脑操作系统基础知识多篇[此文共6802字]

[导语]电脑操作系统基础知识多篇为的会员投稿推荐,但愿对你的学习工作带来帮助。

这是一本现代操作系统介绍的电子书,虽然看上去很专业,但是还是很通俗,略有电脑基础的人可以读一读,会从更加底层一些的角度全面认识电脑。下面就让小编带你去看看电脑操作系统基础知识吧,希望能帮助到大家!

操作系统基础解析:Windows和Linu__ 到底有何不同?

计算机操作系统是基础软件,分为闭源和开源两类。

广义的操作系统包括:计算机(PC、工作站、服务器)系统、移动端系统(例如鸿蒙)、嵌入式系统 等。本文只涉及计算机操作系统。

计算机操作系统的功能角色:作为用户和计算机硬件资源之间的交互,管理调度硬件资源,为应用软件提供运行环境。操作系统属于基础软件,是系统级程序的汇集,为用户屏蔽底层硬件复杂度,并提供编程接口和操作入口。操作系统控制处理器(CPU)调度系统资源,控制应用程序执行的时机, 决定各个程序分配的处理器时间(CPUtime)。操作系统需要兼容底层硬件和应用软件,才能实现计算机的功能。

根据核心代码是否向开放,操作系统可划分为两类:开源系统、闭源系统。

1.闭源操作系统:代码不开放,以微软

Windows 系统为代表

微软公司内部的研发团队开发 Windows 操作系统,并开发配套的应用软件,比如 Office。在生态 建设方面,Intel 和 Windows长期合作形成 Wintel 体系,在 PC 端市占率全球领先

Windows 系统的访问分为 User mode(用户模式)和 Kernel mode(内核模式)。用户级的应用程序在用户模式中运行,而系统级的程序在内核模式中运行。内核模式允许访问所有的系统内存和 CPU 指令。Windows 系统从最早期的 16 位、32 位到现在流行的64 位,系统版本从最初的 Windows 1.0 到 Windows 95、Windows 98、Windows 2000、Windows2003、Windows __P、Windows Vista、Windows 7、Windows 8、Windows 8.1、Windows 10 和Windows Server 服务器企业级 操作系统,不断持续更新。

Windows 系统最大的优势在于图形界面,使得普通用户操作起来非常便利。相比大部分 Linu__ 系 统,windows的常用软件安装和系统设置不需要以命令行的方式去输入系统指令,只需要点击“按 钮”即可完成。如今,绝大多数常见软件、专用软件和底层硬件都支持 Windows操作系统,形成 了 Window 强大的生态整体。

2.开源操作系统:代码免费开放,以

Linu__ 操作系统为代表

Linu__ kernel(内核)由 Linus Torvalds 在 1991 年发布,代码免费公开,由全球开发者共同贡献,已成为影响最广泛的开源软件项目。以 Linu__ 内核为基础,不同的开发团体(开源社区、企业、个 人等)对内核代码进行一定的修改和补充,加入GUI(图形界面)、应用等部分,形成了相应的 Linu__ 操作系统发行版。

Linu__ 系统版本之间存在衍生关系,由此形成 RedHat、Slackware、Debian 等几大家族,各家族 内部又衍生出一些著名版本,如Ubuntu、SUSE、CentOS、Red Hat Enterprise Linu__、Fedora 等。

Linu__ kernel 是开源项目,由全球范围的开发者(企业、团体、独立开发者)共同贡献源代码。Linu__ 的官方组织是 Linu__基金会,作为非盈利的联盟,协调和推动 Linu__ 系统的发展,以及宣传、保护 和规范 Linu__。Linu__ 基金会由开源码发展实验室(Open SourceDevelopment Labs,OSDL)与自 由标准组织(Free Standards Group ,FSG) 于 2007 年联合成立。

开源社区是 Linu__ 系统的创新源泉和主要的开发场所。Linu__ 操作系统发行版分为社区版本和商业版本。社区版本数量较多,其开发和维护的主体是开源社区。少数的商业版本(比如红帽企业版)则是在社区版本的基础上,进一步优化而来。整体来看,无论是否涉及商业活动,开源社区是 Linu__发行版的创新来源和主要的开发场所。而成熟的开源社区通常由相应的开源基金会(或者项目委员会)进行管理。开源基金会为开发社区制定了规则,进行资源管理,负责可能的商务对接,以及保护社区的健康运转。社区的开源基金会(委员会)一般由开源贡献方进行赞助和决策支持。

许多开源社区背后都有一个主导企业,为社区提供资金和研究支撑,甚至直接委派员工参与开源 项目。例如,Fedora 社区的核心开发者中 1/3是红帽的正式雇员。通过资助和维护开源社区的方 式,企业可以发挥研究力量的“杠杆”作用,通过向社区输入自有的研究资源,吸引更多的外部贡献者参与进来,扩大创意来源;另一方面,开源社区版本也成为企业扩大技术影响力的重要途径。

Linu__ 操作系统由 4 部分组成:kernel、shell、文件系统、应用程序。Kernel(内核)是操作系统的 核心,不同于 windows的内核,Linu__ 的内核不仅实现了进程调度、内存管理、中断处理、异常陷 阱处理,而且还实现了进程管理、进程通信机制、虚拟内存管理、文件系统驱动和USB、网络、声 音等各类设备驱动子系统,决定了整个系统的性能和稳定性。而 shell 是系统的用户界面,提供用户与内核交互的接口,接收用户输入的命令并送入内核去执行。

Linu__ 操作系统主要的优势领域是服务器和嵌入式。据 Linu__ 基金会统计,全球 90%的公有云平 台采用了 Linu__ 系统,99%的超算和62%的嵌入式设备也都是基于 Linu__。亚马逊 AWS、微软 Azure、微软 Azure、谷歌云平台和阿里云等主流云服务商,都提供了 Linu__系统方案。全球公有 云平台运行的所有应用,超过 54%是运行在 Linu__ 虚拟机上。甚至微软 Azure 的近 30%的虚拟机 也是基于 Linu__。根据IDC 在 2017 年的统计数据,全球服务器操作系统使用份额(免费+付费)中, 68%是 Linu__ 服务器操作系统。

Linu__ 操作系统在服务器领域的普及,主要由于 3 个方面:

1)创新方面,集思广益。全球开发者对 Linu__ 内核保持了持续的更新,提供了充足的创新动力。据 GitStats 分析结果,截至 2018 年 9月,已有超过 19000 名开发者为 Linu__ ……此处隐藏2222个字……成),因此还不能运行

这是一个理想化的状态,Linu__中进程还有一些别的状态

内核中有一个数据结构叫做Process Control Block(PCB),用来记录上面提到的各种信息,每个进程都有一个对应的PCB。

CPU虚拟化

下面来考虑实现CPU虚拟化要解决的两个核心问题:

安全:用户的进程不应该拥有无限制的权限,比如它不应该能访问另一个用户的文件,而权限检查的把关就需要由操作系统来实现。

性能:操作系统提供CPU虚拟化这种抽象机制的时候,不应该有太大的性能损失

计算机系统采用了一种叫Limited DirectE__ecution的机制,通过硬件和操作系统的协作解决了这两个问题。在具体实现上,CPU中有一个状态位,表明了当前运行在什么模式下:

用户的进程运行在用户模式下,这种模式能做的操作有限,比如它无法发起一个I/O请求,尝试这么做会引发一个异常(e__ception),导致进程被操作系统杀死。

与之相对的是,内核代码运行在内核模式下,它能执行所有特权操作,比如发起I/O请求。

如果用户进程需要发起特权操作,必须通过操作系统内核来进行,操作系统提供了很多这样的服务入口,这就是系统调用,比如说打开一个文件用到的open()系统调用。这些系统调用看起来像是一个普通的函数,而内部实现上只是把系统调用的编号,和对应的参数放到栈上某个特定的位置,然后调用trap指令,这个指令会完成以下几个操作:

把当前进程的CPU寄存器的值保存到内核栈中

把运行模式切换为内核模式

跳转到该系统调用的处理函数

内核检查参数和权限和合法性,然后执行相应的处理,无论结果如何,最终调用return-from-trap指令返回用户进程,具体过程如下:

从内核栈中还原该进程的CPU寄存器值

把运行模式切换为用户模式

把程序计数器(PC)设置为进程的下一条指令,从而恢复用户进程的运行。

可以看到,用户进程直接运行在CPU上, 因此保证了性能,而通过内核模式和用户模式的区分保证了安全,这里主要的损耗在于上下文切换带来的开销。

内核调用return-from-trap之前还会检查进程是否有待处理的信号,如果有的话在这里触发信号处理函数。

抢占式调度

Limited Direct E__ecution存在一个问题,一个进程可能会长久地占用CPU,导致其他进程无法得到服务,那么这个进程什么时候把控制权还给操作系统,让操作系统调度其他进程呢?很自然地,一个合理的时间点是触发系统调用的时候,操作系统可能会决定先执行另一个进程。但如果是一个无限循环,中间没有任何系统调用呢?一些早期的系统如MacOS采用了合作式的调度方案,长期运行的进程需要周期性地让出CPU,比如在循环体中加入一个yield()之类的系统调用,允许操作系统调度其他进程。这个方案治标不治本,存在这些场景:

某些恶意程序希望独占CPU资源,不按照要求来做

程序bug导致yield()一直没有运行

这种情况下,唯一能打破这种循环的方法只有重启。要解决这个问题,操作系统仍然需要硬件的协助。硬件中有个计时器可以编程为每隔一定的时间(比如每十毫秒)就发起一个时钟中断,它会挂起当前运行的进程,跳转到操作系统预先设置的中断处理函数中。在这里,操作系统可以决定是继续运行这个进程,或是调度别的进程。这就是抢占式调度。

异常处理流

程序运行的过程中会遇到各种各样的异常情况,在计算机启动的时候,操作系统就需要为各种异常指定对应的处理函数。CPU在执行完一条指令之后,总是会检查是否存在异常,如果有则触发对应的异常处理函数,否则继续执行下一条指令。

注意:

上文中有两组寄存器的保存/还原操作,第一组是用户态的寄存器,第二组是内核态的寄存器

内核处理完系统的调用后,也可以选择不切换进程,直接调用return-from-trap返回进程A

进程调度策略

上面描述了进程切换的机制,接下来讨论进程调度的策略,也就是说每次操作系统要调度一个进程的时候,选择运行哪一个进程。通常来说,我们有两种类型的工作负载:

交互式的进程,这种进程大部分时候都在Blocked的状态等待I/O,不怎么占用CPU,但是需要得到高优先级的处理,比如shell里面用户每输入一个字符,总是希望操作系统尽快响应并把这个字符显示到屏幕上。

非交互式的进程,他们大部分时间都在使用CPU执行指令,处于Running的状态,这种进程的诉求是高吞吐量,尽可能减少进程切换带来的开销。

下面来看看两种常见的调度策略

多级反馈队列

多级反馈队列(Multi-Level Feedback Queue)致力于提高系统的整体响应时间。

操作系统中维护多个进程队列,从高到底依次为每个队列分配不同的优先级:高优先级的进程分配较短的时间片,保证快速响应;低优先级的进程分配较长的时间片,保证其高吞吐量。具体调度策略如下:

如果A的优先级大于B,运行A

如果A的优先级等于B,轮流运行A和B

然而我们不知道每个进程的工作模式是交互式的还是非交互式,因此先假设他们都是需要快速响应的交互式进程:

当进程启动的时候,把它放到最高优先级的队列中

当一个进程用完它的时间片之后,降低它的优先级,也就是移到下一个队列中

还存在一个问题,如果有大量高优先级任务,那么低优先的任务可能会被饿死,因此:

每隔一段时间把所有的进程都移动到最高优先级的队列

按比例共享调度

与MLFQ相对的,按比例共享调度(Proportional ShareScheduling)的目标是让各个进程公平地获取CPU时间。它最简单的形式叫做彩票调度(lotteryscheduling):假设系统使用100张彩票(编号为0-99),每次随机选择一张来决定运行哪个进程,进程A持有75张(编号为0-74),进程B持有剩余的25张(编号75-99)。任务调度器每次计算出一个0-99之间的随机值,如果落在0-74之间则运行进程A,反之运行进程B,这样保证了两个进程总体获得的CPU时间跟它们持有的票据数量一致(75%:25%)。

最后还有个问题,怎么为进程分配票据(或者说权重),可以跟nice值关联起来。

Linu__的进程调度器

Linu__当前采用的进程调度器叫做完全公平调度器(Completely FairScheduler/CFS),内部采用红黑树,实现了跟按比例共享调度类似的目标。之前采用的进程调度器为O(1),其实现类似前面说的多级反馈队列。

你也可以在搜索更多本站小编为你整理的其他电脑操作系统基础知识多篇范文。

《电脑操作系统基础知识多篇[此文共6802字].doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式