什么是Android操作系统?


选择擅长的领域继续答题?
{@each tagList as item}
${item.tagName}
{@/each}
手机回答更方便,互动更有趣,下载APP
提交成功是否继续回答问题?
手机回答更方便,互动更有趣,下载APP
展开全部android指的是手机操作系统,不是具体型号的手机。Android(中文译名安卓)不是具体型号的手机,而是美国谷歌公司开发的移动端操作系统,使用Andriod系统的智能手机被称作Andriod/安卓手机。Android的本意为机器人,谷歌公司与开放手机联盟基于Linux内核开发的智能移动操作系统,也因此以Andriod来命名。Android主要使用于移动设备,如智能手机和平板电脑。除了苹果公司的IOS系统之外,其他很多手机都可以被称为安卓手机,安卓手机指在Android系统的基础上进行优化的手机,像vivo、小米、oppo等国产品牌手机,虽然拥有自己的系统版本号,但都属于安卓手机。Android优势在优势方面,Android平台首先就是其开发性,开发的平台允许任何移动终端厂商加入到Android联盟中来。显着的开放性可以使其拥有更多的开发者,随着用户和应用的日益丰富,一个崭新的平台也将很快走向成熟。Android有丰富的硬件选择,这一点还是与Android平台的开放性相关,由于Android的开放性,众多的厂商会推出千奇百怪,功能特色各具的多种产品。Android是不受任何限制的开发商。Android平台提供给第三方开发商一个十分宽泛、自由的环境,不会受到各种条条框框的阻扰,可想而知,会有多少新颖别致的软件会诞生。已赞过已踩过你对这个回答的评价是?评论
收起Android应用加固是一种保护应用程序安全的技术,它通过加密、压缩、混淆等方式来防止应用程序被反编译或篡改。以下是一些常见的Android应用加固方法:1. 使用加固工具:例如,使用加固工具可以压缩、混淆、加密等操作,以增强应用程序的安全...
点击进入详情页本回答由深盾安全提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
为你推荐:
下载百度知道APP,抢鲜体验使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。扫描二维码下载
×个人、企业类侵权投诉
违法有害信息,请在下方选择后提交
类别色情低俗
涉嫌违法犯罪
时政信息不实
垃圾广告
低质灌水
我们会通过消息、邮箱等方式尽快将举报结果通知您。说明
做任务开宝箱累计完成0
个任务
10任务
50任务
100任务
200任务
任务列表加载中...
现如今自动化手机早已变成大伙儿离不了的通讯设备,在持续发展趋势与创新中,不断涌现了一批强劲的手机操作系统,那麼你知道普遍的手机操作系统有什么吗?今日我就做一期科谱,给大伙儿详细介绍普遍的手机操作系统有什么。普遍的手机操作系统有什么?实际的详细介绍以下:1、安卓系统安卓是世界最大的移动操作系统,安卓手机的全球市场占有率超出八成,国内手机的系统基本全是根据安卓深层订制的,就连全世界销售量主宰——三星,也是应用安卓系统。2、 IOS系统世界第二大操作系统,苹果企业产品研发的操作系统,使用过的都懂,可是ios在全球的市场占有率一直在降低,现阶段市场占有率早已不上百分之二十,与安卓的差别越来越大,但经营盈利依然很高。3、洪蒙HarmonyOS系统华为洪蒙系统是一款全新升级的朝向全情景的分布式系统操作系统,造就一个非常虚似终端设备互连的全球,将人、机器设备、情景有机化学地联络在一起,将顾客在全情景日常生活触碰的多种多样移动智能终端完成急速发觉、急速连接、硬件配置互帮互助、資源共享,用适合的机器设备给予情景感受。以上便是我产生的普遍的手机操作系统有什么的所有内容,洪蒙系统做为华为自主研发的操作系统,坚信在不就未来会得出令人震惊的考试成绩。发布于 2021-06-26 17:21
本文章是Operartng System Concepts一书的读书笔记。什么是操作系统?我们最熟悉的实例便是运行在手机或者电脑上的各类操作系统,如Windows、Linux、Android等等,而其他能联网的智能器械也有自己的操作系统。不同的操作系统往往形态各异,底层逻辑更是大不相同,它们为应用程序提供了运行的环境,因此也是计算机系统中保证用户使用体验的关键组成部分。在学习完这一章之后,你将了解以下知识:计算机系统(computer system)的整体架构中断(interrupts)在计算机系统中扮演的角色计算机硬件的各组成部分在不同的计算环境(computing environments)中操作系统发挥的作用所谓计算环境就是程序运行的环境,比如手机等移动设备就提供了和桌面电脑相比截然不同的计算环境。什么是操作系统操作系统是计算机系统的重要组成部分,而一个典型的计算机系统可以划分为硬件、操作系统、应用程序和用户。硬件包括中央处理器(central processing unit, CPU)、内存和输入输出设备(input/ouput devices, I/O);应用程序如浏览器等直接提供服务给用户;而操作系统就负责控制硬件并协调不同应用程序对硬件资源的使用。从上面的描述可以感受到,操作系统本身并不提供任何有用的功能,它只是一个环境,就像大海里的水——但失去了水的大海将干涸而死,正如失去了操作系统的计算机系统寸步难行那般。从另一个角度来说,操作系统连接了用户和计算机,我们可以从两个角度来描述操作系统。对用户来说,操作系统表现为它的交互界面,包括我们熟悉的不同操作系统的图形界面,以及键盘鼠标等等输入输出设备。对个人电脑来说,操作系统首要考虑的是用户便捷的使用体验,而对会有多个用户访问使用的大型设备如服务器来说,如何最大化资源利用(resource utilization)则是更重要的指标。当然并不是所有计算机都需要考虑到用户交互,比如工厂里那些进行自动化生产的机器是不会有所谓“用户”的在计算机看来,操作系统像一个严格的管理者,它有条不紊地管理着运行在这台机器上所有应用程序,确保它们按照设计者的预期行动,并且阻止任何试图破坏系统的行为。为了确保应用程序能够正确运行,操作系统会合理地分配这台机器的硬件资源——包括CPU时钟周期、内存空间、储存空间、输入输出设备等等,应用程序们会如幼儿园里的小朋友一般争吵着讨要这些资源,操作程序则发挥它的聪明才智秉承着高效和公平的原则尽可能地解决这些有时甚至相互冲突的资源请求操作系统本身是一个庞杂的概念,在计算机科学发展的过程中这个词被用来指代各式各样的软件,这就导致其外延被大大扩展从而难以把握——当然这个词含义的朦胧程度还远远没有无可救药到左右派那般程度。在计算机发展的早期,它们都是些巨大笨重的机器,它们的用途和今天相比较为局限,如在第二次世界大战中计算机用于破译敌方的加密电报,以及用于人口统计相关的计算当中。随着计算机硬件的发展,计算机的体积不断减少的同时性能不断提升,它能做的事越来越多,也因而更加复杂,这时再以使用计算器的方法去使用计算机就不再合适了,我们可以将需要反复使用的功能记录成程序(或者纸带),这样在之后需要使用的时候就可以反复使用,这便是应用程序。而这些直接在裸机上运行的应用程序本身也有很多相同的功能,比如说所有需要联网的程序都需要实现完全相同的网络连接功能。我们因此也就可以将所有这些相同的功能打包成一个程序,其他所有应用程序都在这个程序的基础上运行,这便是操作系统。因此任何公司或者人只要愿意,都可以将他发行的软件称作操作系统。但这样是不是太随意了?难道Windows中自带的记事本或者浏览器也属于操作系统的一部分,而非应用程序吗?所以我们应该对目前市场上的操作系统做更详细的划分,广义的操作系统包括内核(kernel)和系统应用(system programs):前者是我们想要讨论的真正的操作系统,它一直在电脑中运行着,是操作系统真正的功能部分;而系统应用作为内核的辅助存在,像之前提到的各种操作系统自带的应用程序都属于系统应用。可能令人惊讶的是,图形界面也不属于内核,操作系统的正常运行不需要图形界面,你可能见过只有黑乎乎的命令行界面的操作系统。近年随着移动设备的发展,操作系统还出现了中间件(middleware),这是一系列提供给应用开发者各种服务的软件,或者说框架。谷歌的Android和苹果的iOS都包含了中间件,提供数据库、多媒体和图形服务。总而言之,操作系统由以下组件构成:一直运行并发挥核心功能的内核、协助应用程序开发的中间件以及辅助计算机系统运行的各种系统软件。本书大部分时候关系的都是内核,也就是狭义的操作系统,但在必要时也会介绍其他两个组件,使我们的讨论更加完整。计算机系统现代的计算机系统的核心部分由一个或多个CPU以及数个设备控制器(device controller)组成,一条总线(bus)将这些组件连接起来,设备控制器又和外围设备如鼠标、键盘、硬盘等等相连接,组成一个完整的计算机系统。每个设备控制器都负责与特定种类的一个或者多个设备交互,设备控制器拥有自己的本地缓冲区(local buffer)和寄存器,负责将外围设备的输入存储在本地缓冲区上。在软件层面与设备控制器相配合的就是所谓的驱动程序(device driver),驱动程序一方面与设备控制器沟通,另一方面给操作系统提供和设备沟通的接口。CPU和设备控制器是平行运行的,互相争夺内存资源。当然为了保证顺利访问内存,设备控制器需要和内存的时钟周期同步。中断(interrupts)前面我们提到设备控制器和CPU是平行运行的,这就给两者的沟通带来了困难。例如当应用程序需要读取键盘输入时,驱动程序会向键盘对应的设备控制器的寄存器写入特定的值来通知它读取键盘的输入,设备控制器接着将设备的输入数据传输到本地缓冲区中。当设备控制器将输入数据顺利写入到自己的本地缓冲区中之后,它就需要通知CPU来读取这些数据,这便是通过所谓中断来实现的。下面描述一个实现中断的简单模型:硬件通过总线给(通常来说)CPU发送信号来触发一次中断。当CPU接收到中断信号时,它会停下手中的工作,将当前的状态保存在栈中。然后CPU跳转到中断处理程序所在的地址执行中断处理程序,在中断处理程序执行完毕之后,CPU回复到接收中断信号之前的状态,继续执行被“中断”的工作。当然,现实当中的中断处理并没有这么简单,我们会遇到以下问题:当CPU执行一些关键指令时是不能被打断的,我们如何让CPU在这个时候不被不重要的中断打扰?由于中断是经常发生的,因此提高处理中断的效率也能极大提升整个系统的效率,我们如何高效地识别不同类型的中断并跳转到那个类型对应的中断处理程序?不同的中断有不同的重要级,我们如何让CPU优先处理更加重要的中断?为了能够及时处理中断,CPU中有一个称为中断流水线(interrupt-handler routine)的部分,外部的中断信号会到达这个部分,CPU则定期(比如每个时针周期)来检查是否有新的中断。我们可以将中断流水线分为两种,一种接收不可忽略(nonmaskable)的中断,如除以零等各种硬件错误中断;另一种接收可忽略(maskable)的中断,通常是各种设备发出的服务请求。如此我们就可以让CPU在执行关键命令时停止检查可忽略中断流水线,也在简单地将中断分为了两个重要级,不过实际上中断重要级的实现远没有这么简单,这里不做讨论。为了区分不同类型的中断,我们第一时间想到的是使用一个总的中断处理程序来处理所有的中断。但这太臃肿了,有速度上的硬伤。我们使用的策略是每种中断都使用不同的中断处理程序,并使用一个位于内存地址底端的中断数组(interrupt vector)存储所有中断处理程序的地址。每个中断都有一个中断号,这便是对应中断处理程序的地址在中断数组中的索引值。例如下面这张表展示了intel处理器的中断数组,索引号0-31对应不可忽略中断:不过由于设备种类繁多,系统预先分配给中断数组的空间很可能无法存储所有的中断处理程序的地址,我们可以将一部分地址整理成另外的中断数组,然后在默认的中断数组中存储新的数组的头地址。此时新的中断数组中的中断号是相同的,都是这个数组的头地址在默认中断数组中对应的索引值,因此在新的中断数组中我们只能一个一个地寻找对应的中断处理程序。存储结构(Storage Structure)CPU只能从主存(main memory)/内存中读取数据或者指令。我们可以将内存看作一个巨大的字节数组,每一个字节都有自己的索引也就是地址。CPU对内存的操作基本可以归结为两种:加载(load)和存储(store),前者将某个内存地址上的数个字节写入CPU某个寄存器(register)中;后者将CPU的某个寄存器中的数据写入某个内存地址上。CPU运行指令的过程中便有大量的内存操作,它在每次运行指令之前,都会检查特定寄存器中存储的指令地址,然后根据这个地址去内存中找到并将下一条指令加载到指令寄存器(instruct register)中,这被称为取指(fetch). 接下来CPU对指令进行分析,分为操作和操作数,分析完毕后可能还会从内存中加载额外需要的操作数,这被称为解码(decode).内存在计算机硬件中表现为随机存取存储器(random-access memory, RAM),或者说动态随机存取存储器(dynamic random-access memory, DRAM). RAM是一种易失(volatile)的存储器,其中的数据在断电之后就会消失,因此它只能用来存储计算机运行时需要的数据和指令,而对于其他需要长期存储的数据,我们需要使用其他的介质来存储。如电脑接通电源后运行的第一个程序是引导程序(bootstrap program)便不能存储在RAM中,否则我们一旦关机就无法开机了!引导程序通常存储在电子式可擦除可编程只读存储器(electrically erasable programmable read-only memory, EEPRM)或者其他固件(firmware)当中,它们能够保证存储的数据在断电之后不会消失,并且这些类型的存储器通常读写速度都很慢,适合存储不会轻易改变的程序和数据——引导程序就刚好满足这样的要求。其他需要长期保存的程序和数据保存在性能更佳的存储器上,这就是我们常说的硬盘,如机械硬盘(hard-disk devices, HDDs)和固态硬盘(solid-state drive, SSD),HDD比SSD存储空间大(相同价格下)而速度慢。对存储空间需求更大的场景如服务器备份,还会使用到存储密度更大而访问速度更慢的介质,如光盘、磁带等。实际上我们在选择存储设备总是会面临存储空间和访问速度的取舍,两者不可兼得,因此不同的存储设备有不同的应用场景,比方说一个典型的个人计算机会在CPU内部设置访问速度最快(几乎无延迟)而存储空间极其有限的寄存器而在远离CPU的系统总线的另一端设置访问速度很慢(几十毫秒到几秒不等)的机械硬盘。我们目前只是简单介绍了寄存器、内存和硬盘,我们会在接下来进一步在计算机系统中发挥巨大作用的缓存(cache)和在此基础上构建的存储体系。下图按照存储空间升序,访问速度降序的顺序列举了目前主流的存储设备:更快的I/O我们在上面已经介绍了为了提升I/O操作速度而做出的种种努力,但这种基于中断的I/O操作(interrupt-driven I/O)总是要让CPU和设备控制器去争抢CPU时钟周期,当设备控制器仅仅只是传输少量数据(如键盘输入)时效率并不算低;但到了处理硬盘I/O时往往会传输大量的数据,这会浪费很多时钟周期(访问硬盘是相当慢的),我们可以先让硬盘先将数据传输到内存,然后CPU再从内存中访问相关数据,这便是直接内存访问(direct memory access, DMA). 具体做法是在设备控制器收到I/O请求时,直接将数据块(block)从设备移动到内存当中,然后每成功移动一个数据块时才向设备驱动发送一次中断信号。由于内存的访问速度快于硬盘,并且硬盘和内存的数据传输不占用CPU的时钟周期,这就大大提升了硬盘I/O的效率。计算机系统架构(Computer-System Architecture)CPU是计算机系统的核心,计算机一词中所谓“计算”基本都是由它完成的,因此这一节我们选择以CPU为分类依据对计算机架构进行分类介绍。在介绍体系架构前,我们先了解几个基本概念:处理器(processor):是现实中计算机系统里CPU这个抽象概念的具象体现,也就是发挥CPU作用的硬件核(core):是CPU中的基本计算单位,一个基本计算单位或者说一个核本身可以运行一套通用指令集(general-purpose instruct set)多核(multicore):一个CPU(或者叫处理器,如果你愿意的话)中有多个核多处理器(multiprocessor):一个计算机系统中有多个处理器实际上在操作系统看来,一个单核处理器和一个核是没有区别的,我们可以将核看作CPU.单核单处理器这是最简单的架构,在由一个单核处理器承担所有的运算工作的同时,这个系统可能还包含有外围设备的特定处理器,但是它们是不能算作我们所讨论的处理器的一部分的。处理器负责运行来自进程(简单理解为正在运行的程序即可,后面会详细介绍)的所有命令,这些命令全都来自这个处理器使用的通用指令集。外围设备上的处理器只处理设备相关的计算,比如键盘控制器上的处理器可能会负责将键盘输入转化成CPU能够直接处理的数字,同时又完全不理会进程的运行。有时操作系统可以控制这些外围的处理器,指挥它们帮助自己执行命令,其他时候一些设备上的处理器所做的工作是硬编码到硬件中的。但无论如何,这些外围的处理器并不能让一个计算机系统摇身一变称为多处理器架构。多处理器乍一听,多处理器是要比单处理器更加高端的技术,而现实技术发展的趋势也确实向我们展现了单核单处理计算机的没落,如今的个人电脑市场基本被多处理器计算机占领,更不用说性能要求更高的大型计算机。多处理器确实提供了更高的数据吞吐量,母庸置疑,多个处理器一起工作能够提供比一个处理器工作更高的效率(同等情况下),但这不是简单的乘法,使用n个处理器无法简单获得n倍算力。就像管理一个团队那样,保证团队的一致协作是需要付出大量精力的,而对于计算机也同样如此,我们需要花费额外的算力去保证所有处理器都正确工作。同时团队的精诚团结也需要管理者的励精图治,正如如果想尽可能发挥出多处理器的全部实力就需要开发人员付出巨大精力去编写能够在多个处理器上正确地同时运行地程序。相信我,这很有难度。最简单的多处理器模型是对称多处理(symmetric multiprocessing),简单来说在这个模型中,所有处理器的地位相等,分享这个系统中的其他所有资源,如内存、输入输出设备等。并且每个处理器都是相互独立的,拥有自己的寄存器和缓存,通过系统总线和内存相连。此时拥有n个处理器的系统可以同时运行n个进程,并且由于这些进程彼此是独立的,系统需要花费的“协调”的功夫就更少,总体来说当n个进程占满了n个处理器时,效率是相当高的。但是如果少于n个进程呢?让我们更极端一点,假设只有一个进程,此时只会有一个处理器去运行这个进程,而剩下的n-1个处理器却只是在旁边袖手旁观。这真是可耻的浪费,不过好消息是可以使用特别的系统设计(软件上)使进程和硬件资源在处理器之间共享,从而规避这样的问题,我们在后面会介绍它。那么,处理器是越多越好吗?不见得,在实践中人们发现一旦处理器的数量达到一个量级之后,处理器之间会竞争着索取硬件资源,这导致系统总线上的流量激增,大量处理器无法通过拥挤的系统总线获得必要的资源,致使系统性能不升反降。给系统总线扩容无济于事,人们因此想到了将系统进一步分散,把处理器共享的内存拆分成每个处理器的本地内存,再用更短更快的线将所有处理器-内存组合两两相连,这就是非均匀访存模型(non-uniform memory access, NUMA). 因为NUMA模型中所有处理器都有专属的内存,更多处理器意味着更多的专属内存,也意味着更快的运行速度。多核实际上是多处理器概念的一部分,多核相比单纯的单核多处理器有速度上的优势,因为显然不同核在芯片内部的沟通肯定要快于不同处理器在芯片之间的沟通,并且减少芯片数量还能带来能耗的降低。典型的多核处理器会给每个核都分配独立的寄存器以及L1缓存,同时所有核共享一个相对大的L2缓存。如今的绝大多数处理器都是多核的。集群系统(Clustered System)集群系统纠集了多个彼此独立的计算机系统(称为结点),通过将它们松散地通过局域网或者互联网连接起来组成一个更大的系统。集群系统往往用于运行高可靠性的服务,这种服务的首要目标就是要保证其总是能够正常工作,这一架构能够保证在系统出现任何损坏时都能够将因此被迫停止的工作转移到备用部分上,因此只要有足够的备份,我们就可以“永远”提供服务。一共有两种方式来实现这一高可靠性:一种是热备份模式(hot-standby mode),作为热备份的机器监控正在正常工作的其他机器,并且只做这件事,一旦有任何机器出现了异常而影响到了这台机器上程序的继续运行,热备份机器立刻转换身份,接过被影响的程序继续工作;一种是对称集群(symmetric clustering),在这种实现方式中所有机器监视彼此,时刻准备帮助不能正常工作的结点。近年随着技术的发展,集群系统有了一个称为储域网(storage-area network)的新的组成部分,它允许所有的结点都能够连接到一个共享的储存池。这个部分的出现是为了解决大量数据在局域网乃至互联网中传输缓慢的问题。操作系统中的切换操作系统作为软硬件之间的桥梁,需要负责统筹众多组件,因此切换就成为了操作系统中在设计时需要多加考虑的重要功能。这一节我们将会简单介绍电脑开关机状态的切换、进程之间的切换和硬件运行优先级的切换,更加细节的讨论留给后面的章节。电脑如何启动开关机对作为电脑用户的我们来说是再稀松平常不过的事情,但即使是这个看起来这么简单的操作也是不容易的,首先摆在我们面前的就是一个类似悖论的问题:我们需要运行程序来加载操作系统,但是在电源接通的时候内存中是没有任何程序的,因此我们永远无法启动电脑!在英文中开机引导程序是bootstrap program,bootstrap这个词原意为鞋带,bootstrap program这个词有比喻一个人提着自己的鞋带将自己举起来的意味,描述了开机这个行为的内在矛盾。所幸我们解决了这个问题,在前面我们就已经提到过开机引导程序是专门存储在固件上的。在接通电源之后存储在固件中的开机引导程序就会找到操作系统内核的入口,然后将它加载到内存中,接着将控制权交给加载完毕的内核,这个程序就完成了它的历史使命。内核在开始工作之后就会开始提供电脑运行所需的各种服务,但有些比较重要的服务并不由内核负责,而是交给系统应用。这些从开机伊始就存在的进程会一直工作到内核停止工作,它们被称为守护进程(system daemons)多道程序(Multiprogramming)和多任务(Multitasking)大部分人都很熟悉alt+tab这个快捷键,它在Windows系统下提供了快速切换窗口的功能,而正是得益于计算机处理多个进程的能力,我们才能随心所欲地打开一堆窗口,并享受几乎没有延迟的任务切换。在计算机科学发展的早期,还没有出现完善的程序切换机制,每当程序运行到需要等待其他操作的输入时,CPU就会停下来耐心等待输入完成。最典型的例子如I/O操作,比如程序要求操作人员输入新的数据,而人的输入操作是要比计算慢很多的,让计算机在这么长(对计算机而言)时间内只是在一旁等待是不可接受的。因此后来人们对此做出了改进,产生了名为多道程序的机制。这一机制的原理很简单:计算机将需要运行的所有程序都加载到内存中,每当程序运行到需要等待其他任务完成的阶段时,操作系统就保存当前程序的运行状态转而运行其他程序。因为早期计算机的大部分任务都是进行科学计算,因此人们只关心程序的输入和输出,这种简单的机制运行的相当好。但是随着计算机不断发展,新的需求出现了,人们需要主动切换进程,这时多道程序这种被动切换进程的机制就慢的让人不可接受了。因此又出现了名为多任务的技术,它同样将所有需要运行的程序加载到内存中,然后操作系统根据情况不停切换正在运行的进程,由于CPU切换进程的频率非常高,因此在使用者看来电脑仿佛在同时运行所有程序。这里有一个小小的问题:如果某个程序意外进入了死循环,计算机也就会陷入瘫痪,因为控制权此时被它牢牢地抓在手里,操作系统也无能为力。因此我们需要一个机制来阻止程序过长时间运行,这就是计时器(timer),操作系统会在创建每一个进程的同时都附加一个计时器,指定一定时间之后产生一个中断。如果产生了中断,控制权就会交给操作系统,后者再来决定继续这个进程的运行或者说终止它。实现多任务需要诸多技术的支持:我们需要内存管理(memory management)来统筹内存中的数个进程;我们需要进程调度(CPU scheduling)选择下一个要运行的进程;我们需要存储管理(storage management)提供文件系统;我们也需要合适的机制来实现进程之间的同步和通信等等,这些技术我们会在后面详细讲解。用户模式(user mode)和内核模式(kernel mode)操作系统中另一个很重要的概念就是隔离,操作系统需要阻止错误甚至是恶意的指令影响其他程序以及操作系统本身的正确运行,这就是通过用户模式和内核模式的区分实现的。这两种模式的区分背后的理念很简单:禁止未经授权的行为。一些指令会因为有潜在的危害性而被划分为需要授权才能运行的指令,而不同的模式有不同级别的权限。内核模式下的CPU会运行所有能够运行的指令,而在用户模式下的机器会无视一些被指定为特权指令(privieged instructions)的指令,比如转换到内核模式的指令,并且这个模式下的机器也被禁止访问一部分资源——比如操作系统所在的内存位置。这两种模式的区分是在硬件水平上实现的,硬件专门留出了一个模式位(mode bit)用于存储当前的模式,0是内核模式,1是用户模式。显然,内核是运行在内核模式下的,而其他应用程序以及系统程序都是运行在用户模式下的。当应用程序需要操作系统的特定服务时,它会进行系统调用(system call)。这时计算机会去前面提到的中断数组中寻找对应的处理程序(这是操作系统的一部分),然后将控制权交给它,并从用户模式切换到内核模式,在处理程序执行完毕之后,再从内核模式切换到用户模式,最后将控制权交还给应用程序。内核模式-用户模式是计算机系统控制权限的最为基本的模型,在如今的处理器中往往有多于两个的权限等级,分别用于不同的应用,例如虚拟机需要的权限等级就和浏览器以及操作系统不同。资源管理(Resource Management)我们前面反复强调过,操作系统负责统筹管理计算机系统的大部分资源,包括CPU、内存空间、硬盘空间以及各种输入输出设备。下面我们就来详细介绍这些需要管理的资源。进程管理(Process Mangement)是时候给进程一个更加规范的定义了,所谓进程就是程序的一个运行实例。一般来说程序都存储在硬盘当中,而一个硬盘当中的程序可以在内存中有多个运行中的实例,它们彼此独立,互不干涉。进程也是计算机系统进行工作的基本单位,一个运行中的计算机内存中往往有多个进程,其中包括操作系统进程和应用程序进程。程序运行需要计算机系统的各种资源,因此进程在创建之初就会分配到CPU时针周期、内存空间和输入输出设备等等运行必须的资源,而在进程终止时操作系统负责回收它占有的所有资源。进程之下还有一个被称为线程(thread)的结构,它是操作系统能够运算调度的最小单位,或者说进程中的一条控制流。一个进程可以有多个线程,每个线程的运行都相对独立,拥有自己的程序计数器用于存储下一条需要运行的指令。操作系统需要管理进程的以下活动:进程的创建和删除进程和线程的调度(CPU选择运行哪个进程或线程)在执行进程切换时,暂停和继续进程的运行进程之间的同步进程之间的通信内存管理(Memory Management)前面我们讲到,CPU唯一能够直接访问的大容量存储设备是内存,CPU从内存上读指令以及读或写数据。因此每当CPU需要硬盘上的任何内容时,操作系统都需要将硬盘中的内容加载到内存中,然后CPU才能获得这些内容。例如想要运行一个存储在硬盘中的程序时,它必须首先被映射到一个内存地址上,然后再要求操作系统分配足够的内存空间并加载到这部分内存空间中。当程序运行完毕时,它占据的内存空间会被释放(标记为可使用),等待新的程序来使用这部分内存空间。操作系统需要管理内存的以下活动:追踪所有被占用的内存空间,记录它们的相关信息(例如正在被什么程序使用)分配和释放内存空间时刻关注内存中各个空间使用情况,决定将哪些数据\进程移入或移出内存文件系统管理(File-System Management)文件系统是操作系统提高易用性的绝佳实例,文件系统通过将访问速度、容量、数据传输速度以及访问方式各异的硬盘中的存储空间抽象成文件这个逻辑单位,极大降低了计算机的使用难度。试想若没有了文件系统,用户将不得不面对令人犯怵的一大串数字,同时在不同种类的硬盘上这些数字可能还有完全不同的含义,在进行文件操作时甚至可能还不得不拿出纸笔来仔细计算一番,何等地狱般的场景。文件是一组有内在联系的数据,文件的格式完全由创建者(程序或者用户)定义,因此文件中数据的含义也是由创建者说了算的,它可以是纯粹的文本文件,或是有文档严格定义的文件(如.mp3文件)。在文件之上操作系统又搭建了名为目录(directories,或者说文件夹)的结构,帮助用户进一步管理散乱的数据。操作系统需要管理文件的以下活动:文件的创建和删除目录的创建和删除Supporting primitives for manipulating files and directories将文件映射到实际的硬盘上在非易失性硬件上备份文件硬盘管理(Mass-Storage Management)和寄存器以及内存相比,CPU访问硬盘的速度是相当慢的,因此硬盘操作的效率一般是整个系统的效率瓶颈,这也意味着提高硬盘操作的效率能够有效地提高系统整体的效率。操作系统需要管理硬盘的以下活动:软件的安装和卸载空闲硬盘空间的管理硬盘空间的分配磁盘调度(由于CPU的请求远快于硬盘操作,这些请求往往会堆积起来,硬盘需要对这些请求进行调度来优化访问时间)硬盘分区权限管理缓存管理(Cache Management)缓存是计算机科学当中一个非常重要的概念,而在操作系统中也不例外。缓存的原理简单来说就是将经常需要用到的数据放在CPU访问速度更快的地方。缓存这个词同时指被缓存的数据以及存放缓存数据的硬件本身,具体意思取决于上下文。计算机系统一般将缓存放置在寄存器和内存之间,当CPU需要访问内存中的某个数据时,他会先到缓存中寻找是否有这个数据,如果有就直接将它复制到寄存器中;如果没有就从内存中找到这个数据,然后同时将它复制到寄存器和缓存当中。也就是说我们默认所有被访问的数据都是常用的数据,这种策略省去了繁琐的判断过程,而在缓存装满时我们有不同的替换策略来让旧的缓存数据腾出空间,这些策略会在很大程度上影响缓存的性能。寄存器从某种意义上来说也是缓存,它是CPU和内存之间的缓存,实际上我们将寄存器去除之后CPU仍然能够正常工作,但是这时候所有数据都需要从内存请求,可以想象我们的电脑将会慢的令人发指。在CPU内部也有缓存,例如分别用于缓存数据和缓存接下来可能会用到的指令,当然这些缓存都是在硬件层面上实现的,操作系统并不关心。我们最关注的还是寄存器和内存之间的那个缓存,尤其关注的是缓存的大小以及其选择的替换策略。让我们看一个例子来理解加入了缓存之后的存储结构是如何运作的,假设我们想要修改文件甲中的数值乙。电脑首先通过I/O操作将文件甲加载到内存中,然后再将其中的数值乙复制到缓存和寄存器中,此时数值乙同时存在于四个硬件当中。然而事情并不总是一帆风顺,以上步骤在单核单处理器的机器上可以顺利运行,但一旦到了多处理器的情况时,事情就变得复杂了起来。此时可能有多个控制流同时进行有关数值乙的操作,如果没有谨慎处理这一情况,可能会出现某个控制流复制了已经修改过的数值乙却以为这个数值还没有修改的情况,这时运行的结果就会出错。好消息是,这些麻烦的事情通常由硬件来解决。以上情况在分布式系统中也经常出现,同一份文件可能保存在不同的机器当中,这时系统就需要尽可能快地在任何一个机器上的任何一个修改。I/O设备管理UNIX为I/O设备专门设计了一个I/O子系统,它可以作为我们介绍操作系统管理I/O设备的典范,它由以下部分组成:内存管理组件,其功能有缓冲(buffering)、缓存(caching)以及管理内存池(spooling)等一个统一的设备驱动接口对应不同设备的驱动程序安全和保护(Security and Protection)电脑中并不是总是只有一个用户,总是只运行着操作系统的进程。当出现不同的用户和不同的进程时,相关的问题就接踵而至,其中很重要的一个方面就是我们如何规范这些用户以及他们创建的进程使用系统资源的行为。例如进程只能在它分配到的内存空间中运行;计时器(timer)阻止任何程序过长时间控制CPU;用户无法访问设备内部的寄存器,因为它们是只为在设备内部运行而设计的。所谓保护就是操作系统控制用户和进程对资源的访问。保护机制不仅能够使数据或程序不会遭到意外破坏,它还能起到提高系统稳定性的作用,如果某个子系统出现了问题,保护机制能够及时发现,在它污染其他正常运作的子系统之前修复这个问题。保护机制是典型的“防君子不防小人”的安全措施,如果操作系统遇到来自外界的恶意攻击,保护机制还需要安全机制的配合来保证系统的正常运行。为了实现安全和保护机制,操作系统需要能够识别不同的用户和进程,关于识别不同进程的技术我们留到之后的章节,这里先介绍操作系统是如何通过识别不同用户达到安全和保护的目的的。大部分操作系统都会维护一个用户的列表,其中保存了每个用户的信息以及它们的用户识别码(user identifier),在Windows系统中这个码被称为security ID. 每次用户登入时,操作系统都会查询这个用户的独一无二的用户识别码,接下来这个用户创建的所有进程和线程都带有这个用户识别码,因此操作系统就可以在进程或线程请求资源时检查这个识别码来确定这个用户是否有权限访问这一资源。有时对于一些用户较多的大型机器,操作系统还会通过所谓用户组(user group)来整体管理一批用户的权限,每个用户组当然也有一个独一无二的用户组识别码(group identifier).有时用户可能会临时需要更高的权限来访问某个当前权限无法访问的资源,这时操作系统就会赋予这个用户提升特权(escalate privileges)。例如在UNIX系统中,一个用户可能想要获得某个文件的最高权限(也就是文件创建者的权限),这时setuid这个命令就可以将请求权限的进程的用户识别码从当前用户的修改为文件创建者的。虚拟化(Virtualization)虚拟化技术能够将单个计算机系统抽象成多个系统,如此用户就能够在单台机器上同时运行多个计算环境(具体来说就是操作系统),并且用户能够像在操作系统里切换进程那样随意切换不同的操作系统。虚拟化技术有相当多的应用,最常见的应用是运行当前计算环境不支持的应用程序,比如软件公司可以在开发服务器上使用虚拟机技术部署所有支持的计算环境用于开发、测试以及调试。通常来说虚拟化中会有一个宿主(host)操作系统,然后在这个操作系统上运行如VMware这样的虚拟机管理程序(virtual machine manager, VMM),VMM再运行客体(guest)操作系统,管理分配给这些操作系统的资源,并负责隔离各个客体操作系统。不过现在已经出现了直接在硬件上运行的虚拟机管理程序,减少系统再多运行一个宿主操作系统的性能负担。虚拟化技术是仿真(emulation)技术的一种,所谓仿真就是使A类型CPU能够运行本来只能在B类型CPU上运行的程序,比如苹果正在将mac系列的芯片升级成M1芯片,为了兼容以前旧的x86程序,苹果提供了Rosetta 2应用将原生x86应用转译到ARM平台。当然,因为仿真需要模拟目标CPU的指令集,会存在不小的性能损失。顺带一提,虚拟化技术只支持模拟支持相同CPU架构的操作系统,如x86的计算机不能运行arm版本的操作系统虚拟机。总结操作系统是一种程序,其为计算机系统管理其资源以及提供程序运行必须的环境中断是操作系统和外围设备交互的重要方式,设备通过向CPU发送信号通知其执行必要的任务来触发中断内存是CPU唯一能够直接访问的大容量储存设备电脑在执行程序之前,必须将程序加载到内存当中内存是易失性存储设备,其中的内容会在断电之后失去。因此为了永久存储数据和程序,电脑还需要非易失性存储设备(常见的如机械硬盘或固态硬盘)目前有各种性能和价格的存储设备,总的来说存储体积越小,速度越快并且价格也更昂贵;反之存储体积越大,速度越慢并且价格更低大部分现代处理器都是多核的,为了最大程度发挥它们的计算能力,现代操作系统全部支持在内存中同时管理多个进程,并且发展出了名为多任务的CPU调度技术,使得用户能够体验到几乎无延迟的进程切换进程是操作系统的基本工作单位,操作系统需要管理进程的创建和删除,并给进程提供运行必须的资源,同时保证进程中之间的同步和通信进程之下还有一个名为线程的更小单位,其代表一个控制流所有操作系统都有两个基本的权限等级:内核模式和用户模式为了防止用户或程序的不正确操作影响操作系统核其他程序的正常工作,操作系统将较为“危险”的操作限定在内核模式,操作系统自身运行在内核模式下,而应用程序大部分情况下只能在用户模式中运行存储空间由操作系统管理,操作系统通过将数据抽象成文件以及文件夹提高了存储空间的易用性操作系统负责提供保护和安全机制,保证资源访问和获取的有序进行虚拟化将一个计算机系统中的硬件抽象成多个计算环境

我要回帖

更多关于 android系统有哪些特点 的文章

 

随机推荐