电脑操作系统基础知识大全
这是一本现代操作系统介绍的电子书,虽然看上去很专业,但是还是很通俗,略有电脑基础的人可以读一读,会从更加底层一些的角度全面认识电脑。下面就让小编带你去看看电脑操作系统基础知识吧,希望能帮助到大家!
操作系统基础解析:Windows和Linu__ 到底有何不同?
计算机操作系统是基础软件,分为闭源和开源两类。
广义的操作系统包括:计算机(PC、工作站、服务器)系统、移动端系统(例如鸿蒙)、嵌入式系统 等。本文只涉及计算机操作系统。
计算机操作系统的功能角色:作为用户和计算机硬件资源之间的交互,管理调度硬件资源,为应用 软件提供运行环境。操作系统属于基础软件,是系统级程序的汇集,为用户屏蔽底层硬件复杂度, 并提供编程接口和操作入口。操作系统控制处理器(CPU)调度系统资源,控制应用程序执行的时机, 决定各个程序分配的处理器时间(CPU time)。操作系统需要兼容底层硬件和应用软件,才能实现计算机的功能。
根据核心代码是否向开放,操作系统可划分为两类:开源系统、闭源系统。
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、Windows 2003、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 Source Development 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__ 内核贡献了代码, 这些开发者遍布全球范围超过1500个组织/企业。广泛分布的开发者,从不同视角不同方面对Linu__ 内核的补充,使得 Linu__ 系统得以快速适应服务器领域的变化。
2)系统代码可以修改和自定义,用户可调用计算机资源的自由度极高。Linu__ 操作系统的使用者 可以轻松查看系统代码,可以自由修改代码来修补常见的问题,也可以开发自己的程序并添加入 Linu__ 操作系统中。相比 Windows 等闭源系统,Linu__ 支持了使用者对于计算机资源极大的使用自 由度,支持专业用户去构建和自定义服务器,由此获得了互联网公司、云计算公司的青睐。
3)运行效率高,运维成本低。Linu__ 系统在服务器上面的运行效率较高,相对比较轻量化,除非硬 件资源分配出现问题,不易出现系统卡死状况。而且 Linu__ 系统天然地支持虚拟化。因此,在服务 器集群上,Linu__ 系统的运维成本较低。
4)安全。Linu__ 从发展根源上就是针对多用户系统设计的,系统管理员和 root 用户具有系统管理 权限。Linu__ 面向全球开发者开源,系统文件都是文档,在全球开发者多次的筛查和更新中,基本 排除了“后门植入”的可能。实际应用中,普通不成熟的 Linu__ 操作系统确实可能存在安全问题, 也是和系统的文档属性有关。例如,用户 root 权限和 sudo 指令可在有意或无意间修改 Linu__ 系 统文档,可能会对其他用户或整个系统造成不利影响。因此,成熟的 Linu__ 操作系统解决方案,有 必要对这类属性进行设计方面的防范,去进行适当的权限屏蔽。而这些安全属性的设计,本质上并 不存在难以解决的障碍。
电脑操作系统维护10条基础知识!
1、经常进行“磁盘清理”和磁盘碎片整理”
当硬盘用久了,无数次的新增、更改和删除程序和文件后,就会造成很多断断续续的扇区,非连续性的文件便会愈来愈多,硬盘磁头便需要花更多时间跳来跳去来读取数据,这就导致硬盘速度减慢。
因此,我们应该定期进行“磁盘清理”和磁盘碎片整理”,将所有非连续性的文件重新编排整齐。
处理方法:点开始-程序-附件-系统工具-磁盘清理程序和磁盘碎片整理程序。有可能整理过程很慢,那是你长时间没有清理或者有只读文件,请多执行几次,耐心等待。碎片清理时要退出所有的应用程序。
2、移动internet临时文件和临时交换文件
internet临时文件和临时交换文件是我们上网时产生的临时文件,是产生磁盘碎片的罪魁祸首,叫它离开系统盘是最好的办法处理方法:
⑴在桌面上右键点internet e__plorer图标,再点出来的“属性”,出属性对话框,在internet临时文件后面点“设置”,在出来的设置对话框中点移动文件夹,再选择除系统盘以外的硬盘(如D盘);
⑵、开始-设置-控制面板-双击系统,在“性能”项上点“设置”,在“性能选项”上点“高级”,在“虚拟内存”选项点“更改”,选择除系统盘外的硬盘如d,最后确定。关机重启,ok。
3、开启wondows __p保留的20%带宽
wondows __p默认保留了20%的带宽,我们可以将它开启,充分利用带宽。处理方法:点开始-运行,输入gpedit.msc,打开组策略-计算机配置—管理模板—网络—Qos数据包调度程序,右击窗口右边的“限制可保留带宽”选项,单击“属性”命令,在弹出的“限制可保留带宽属性”对话框中的“设置”选项卡中,勾选“已启用”单选框,将下面的“带宽限制”数值调到“0”。点确定,ok。
4、删除不必要的系统声音
系统声音是计算机事件的一组声音方案,实际一点用处没有,还占用一部分系统内存,干掉它是明智的选择。
处理方法:右键点通知栏里的小喇叭,点调整音频属性,在属性框中点声音,点方案后面的“删除”,再确定,ok。
5、定期清理internet预读文件
在聊天室碰到好多次有些朋友突然打不开我们聊天室的网页了,而其他的网站可以。问题是出现了死连接,实际__P使用一段时间后,预读文件夹里的文件会变得很大,里面会有死链文件,这会减慢系统时间。建议:定期删除。
处理方法:在桌面上右键点internet e__plorer图标,再点“属性”,出属性对话框,在internet临时文件后面点“删除cookies”、“删除文件”。
提醒:删除文件时请选择“删除所有脱机文件”。
6、关于internet e__plorer
IE并不是最佳的浏览器,其缺点之一是占用太多的系统资源,第一次开启IE,占用7%左右的资源,以后每开启一个IE窗口,占用4%左右的资源。现在上网,网页自身自动开启的弹出式窗口就多,快速消耗你的内存是很自然的事情,CUP使用率常在100%也不奇怪。
7、优化硬盘参数
右击“我的电脑”,选“属性”,选中“硬件”下的“设备管理器”标签,然后在“磁盘驱动器”中找到你的硬盘,查看它的属性,在“磁盘属性”标签中选中“启用了写入缓存”;在“IDE控制器”中分别查看“Primary IDE Channel”和“Secondary IDE Channel”的属性,在“高级设置”中将“设备类型”设定为“自动检测”,“传输模式”设定为“DMA(若可用)”。
8、让系统自动释放系统资源
在Windows中每运行一个程序,系统资源就会减少。即使把程序关闭,在内存中还有一些没用的.DLL文件在运行,这样就使得系统的运行速度下降。可以通过修改注册表,令程序关闭后自动清除没有用的DLL文件,收回系统资源。
处理方法:运行regedit打开注册表编辑器,找到并选中HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrenVersione__plorer主键,在右边窗格单击右键,新建一个字符串值,名为AlwaysUnloadDll,然后将AlwaysUnloadDll的键值改为1,退出注册表,重启计算机。
9、固定自己的DNS和IP
一般__P/2000是自动检测IP和DNS地址的,但我们可以自己设置好,以提高系统效率,前提是你要与服务商联系,获取你的DNS和IP地址。处理方法:点开始-设置-控制面板-双击网络连接,点方框中TCP/IP,点属性,点IP地址,选择“指定IP地址”,填入你从服务商那里得到的IP地址和子关掩码;点DNS配置,选择“启用DNS",填入你得到的服务器地址,添加。
10、关于ADSL猫的使用注意事项
因为猫对电源的要求实际很高,只是我们不太注意,猫的电源应该尽量采用独立的电源线,中间要注意避开大功率的用电设备,防止其他用电设备对它的干扰,采取一定的屏蔽接地措施是明智的。
另外注意选择品牌大的猫并注意与服务商提供服务的兼容性,如果ISP的局端设备有了改动,这时我们可能会经常掉线,这时建议下载Firmware版本刷新程序对“大猫”刷新,一般可以完全解决。再者使猫保持良好的散热效果,最好将猫的下面垫空。
操作系统基础-CPU虚拟化
操作系统的三个要素
操作系统的定位是计算机资源(CPU,内存,硬盘,各种I/O设备等)的管理者。最早的计算机系统一次只运行一个程序,操作系统是作为库函数的形式存在的,这种模式无法充分的利用计算机资源,对于早期造价动辄数百万美元的计算机来说,这是巨大的浪费,因此人们引入了现代的操作系统来支持方便的多进程并发执行,允许多个用户同时运行他们的程序。具体来说,操作系统提供了这么三个要素:
虚拟化(Virtualization),主要指的是CPU和内存虚拟化,仿佛每个进程都有自己独占的CPU和内存。
并发(Concurrency),主要指的是线程级的并发。
持久化(Persistance),主要指的是文件系统。
存储器层次结构
为什么说单个程序不能充分利用计算机资源呢?这跟计算机的存储器层次结构有关,计算机中有各种各样的存储器:CPU上的寄存器、一二级缓存,内存、硬盘……这些存储器的容量、性能和成本各不相同,一个典型的存储器层次结构如下:
越是靠近上层(CPU)存储器的性能越好,但是容量越小,(每字节)存储成本越高;越是远离CPU,存储器的性能越差,但是容量越大,(每字节)存储成本越低。比如,CPU访问一级缓存缓存只需要1个时钟周期,而进行磁盘I/O可能需要上千万个时钟周期。程序在进行I/O操作的时候,CPU实际是空闲的,这时候可以让CPU运行其他程序,提供计算机资源的利用率。
另一方面,为了弥补高速CPU到低速I/O设备之间的差距,在存储器之间引入了多层的缓存,比如本地硬盘作为网络的缓存,内存(DRAM)作为硬盘的缓存,SRAM作为内存的缓存。由于局部性原理的存在,这个存储器层次结构通常工作得很好。所谓得局部性原理包含两项:
一是时间局部性,程序一旦引用过某个存储器位置,接下来它很可能还会引用这个位置;
二是空间局部性,程序一旦引用过某个存储器位置,接下来它很可能还会引用附近的位置。
进程
操作系统提供了进程这个抽象概念,一个进程就是一个正在运行的程序。根据Steam 2020年5月的调查,现在主流的PC配置是64位的4核物理CPU和16G内存[1],而目前__86_64的PC上通常会运行几十上百个进程,每个进程拥有256TB的的虚拟内存。正是通过CPU和内存虚拟化,操作系统提供了这种幻象:似乎每一个进程都有一个独占的CPU和一片巨大的独占内存。
在深入这些细节以前,我们先来看看计算机上运行一个进程需要维护些什么状态信息:
用来存取指令和数据的内存,由于进程会根据地址来读写内存,它们也叫做内存地址空间,当然这里指的虚拟内存地址空间(Virtual Memory Address Space)。进程的堆栈信息也在这个地址空间中。
CPU中的通用寄存器,如%ra__
CPU中的特殊寄存器,如:
程序计数器(Program Counter/PC),或叫做指令指针(Instruction Pointer/IP)
栈指针(stack pointer)及其对应的基址指针(frame pointer)
I/O相关的信息,比如当前打开的文件,Socket套接字等。
操作系统通过分时复用的方式实现了CPU的虚拟化,运行进程A一段时间后,主动或被动地把这个进程的状态信息写入物理内存然后从物理内存中读取另一个进程B的状态信息,从而恢复进程B的运行。
进程在其生命周期中,始终处于以下三个状态中的一个:
Running:进程正在通过CPU执行指令
Ready:进程可以运行,但是操作系统还没有调度它
Blocked:进程在等待某个事件发生(比如等待磁盘读取完成),因此还不能运行
这是一个理想化的状态,Linu__中进程还有一些别的状态
内核中有一个数据结构叫做Process Control Block(PCB),用来记录上面提到的各种信息,每个进程都有一个对应的PCB。
CPU虚拟化
下面来考虑实现CPU虚拟化要解决的两个核心问题:
安全:用户的进程不应该拥有无限制的权限,比如它不应该能访问另一个用户的文件,而权限检查的把关就需要由操作系统来实现。
性能:操作系统提供CPU虚拟化这种抽象机制的时候,不应该有太大的性能损失
计算机系统采用了一种叫Limited Direct E__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,导致其他进程无法得到服务,那么这个进程什么时候把控制权还给操作系统,让操作系统调度其他进程呢?很自然地,一个合理的时间点是触发系统调用的时候,操作系统可能会决定先执行另一个进程。但如果是一个无限循环,中间没有任何系统调用呢?一些早期的系统如Mac OS采用了合作式的调度方案,长期运行的进程需要周期性地让出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 Share Scheduling)的目标是让各个进程公平地获取CPU时间。它最简单的形式叫做彩票调度(lottery scheduling):假设系统使用100张彩票(编号为0-99),每次随机选择一张来决定运行哪个进程,进程A持有75张(编号为0-74),进程B持有剩余的25张(编号75-99)。任务调度器每次计算出一个0-99之间的随机值,如果落在0-74之间则运行进程A,反之运行进程B,这样保证了两个进程总体获得的CPU时间跟它们持有的票据数量一致(75%:25%)。
最后还有个问题,怎么为进程分配票据(或者说权重),可以跟nice值关联起来。
Linu__的进程调度器
Linu__当前采用的进程调度器叫做完全公平调度器(Completely Fair Scheduler/CFS),内部采用红黑树,实现了跟按比例共享调度类似的目标。之前采用的进程调度器为O(1),其实现类似前面说的多级反馈队列。
★ 操作系统基础知识
★ 电脑入门操作大全
★ 学习电脑知识
电脑操作系统基础知识大全
上一篇:计算机操作系统基础知识
下一篇:计算机操作系统基础知识大全