操作系统内核态和用户态
- 格式:docx
- 大小:15.77 KB
- 文档页数:2
⽤户态和内核态的区别1.操作系统需要两种CPU状态内核态(Kernel Mode):运⾏操作系统程序,操作硬件⽤户态(User Mode):运⾏⽤户程序2.指令划分特权指令:只能由操作系统使⽤、⽤户程序不能使⽤的指令。
举例:启动I/O 内存清零修改程序状态字设置时钟允许/禁⽌终端停机⾮特权指令:⽤户程序可以使⽤的指令。
举例:控制转移算数运算取数指令访管指令(使⽤户程序从⽤户态陷⼊内核态)3.特权级别特权环:R0、R1、R2和R3R0相当于内核态,R3相当于⽤户态;不同级别能够运⾏不同的指令集合;4.CPU状态之间的转换⽤户态--->内核态:唯⼀途径是通过中断、异常、陷⼊机制(访管指令)内核态--->⽤户态:设置程序状态字PSW5.内核态与⽤户态的区别内核态与⽤户态是操作系统的两种运⾏级别,当程序运⾏在3级特权级上时,就可以称之为运⾏在⽤户态。
因为这是最低特权级,是普通的⽤户进程运⾏的特权级,⼤部分⽤户直接⾯对的程序都是运⾏在⽤户态;当程序运⾏在0级特权级上时,就可以称之为运⾏在内核态。
运⾏在⽤户态下的程序不能直接访问操作系统内核数据结构和程序。
当我们在系统中执⾏⼀个程序时,⼤部分时间是运⾏在⽤户态下的,在其需要操作系统帮助完成某些它没有权⼒和能⼒完成的⼯作时就会切换到内核态(⽐如操作硬件)。
这两种状态的主要差别是处于⽤户态执⾏时,进程所能访问的内存空间和对象受到限制,其所处于占有的处理器是可被抢占的处于内核态执⾏时,则能访问所有的内存空间和对象,且所占有的处理器是不允许被抢占的。
6. 通常来说,以下三种情况会导致⽤户态到内核态的切换系统调⽤这是⽤户态进程主动要求切换到内核态的⼀种⽅式,⽤户态进程通过系统调⽤申请使⽤操作系统提供的服务程序完成⼯作。
⽐如前例中fork()实际上就是执⾏了⼀个创建新进程的系统调⽤。
⽽系统调⽤的机制其核⼼还是使⽤了操作系统为⽤户特别开放的⼀个中断来实现,例如Linux的int 80h中断。
处理机的执行模式与执行状态大多数处理器都至少支持两种执行模式,一种是同操作系统有关的模式,另一种则是同用户程序有关的模式。
较低特权的模式称为用户模式。
较高特权的模式称系统模式、控制模式或内核模式。
内核模式能执行所有的指令,访问所有的内存; 用户模式则只能执行有限的指令,访问规定的内存处理器往往有一个或多个寄存器来保存处理器模式信息——程序状态字(PSW )为了防止操作系统及其关键数据(如PCB )遭到用户程序有意或无意的破坏,通常将处理机的执行状态分为两种:核心态与用户态核心态又称管态、系统态,是操作系统管理程序执行时机器所处的状态。
它具有较高的特权,能执行一切指令,能访问所有的寄存器和存储区。
用户态又称目态,是用户程序执行时机器所处的状态。
它具有较低的特权,只能执行规定的指令和只能访问指定的寄存器和存储区。
信号量练习2.某电话亭每一时刻最多只能容纳一个人打电话。
来打电话的人,如果看到电话亭空闲,则直接进入电话亭打电话;如果看到电话亭里正有人在打电话,则在外面排队等候,直到轮到自己,再进入电话亭打电话。
请用信号量来表达打电话的进程对电话机的互斥使用逻辑。
该电话亭每次只能容纳一个人打电话(进程)使用,所以是一个临界资源,资源量为1,各进程要互斥使用。
用信号量来表达资源的数量:semaphore mutex=1;(或empty=1) main( ) { CobeginPi ( );//(i=1,2,3,4,……); Coend }练习3.某电话亭共有3台电话机,即能容纳3个人(3个进程)同时打电话。
来打电话的人,如果看到电话亭有空闲机子,则直接进入电话亭打电话;如果看到电话亭人满,则在外面排队等候,直到轮到自己再进入电话亭打电话。
请用信号量机制表达打电话的进程对电话机资源的使用限制。
用信号量来表达空闲的电话机数:资源量的初值为3(表示开始时有3semaphore empty=3; main ( ) { CobeginPi ( ); i=1,2,3,…… Coend }4.生产者-消费者问题一个说明空缓冲单元的数目,用empty 表示,其初值为有界缓冲区的大小n ,另一个说明满缓冲单元的数目,用full 表示,其初值为0。
进程上下文和中断上下文是操作系统中很重要的两个概念,这两个概念在操作系统课程中不断被提及,是最经常接触、看上去很懂但又说不清楚到底怎么回事。
造成这种局面的原因,可能是原来接触到的操作系统课程的教学总停留在一种浅层次的理论层面上,没有深入去研究。
处理器总处于以下状态中的一种:1、内核态,运行于进程上下文,内核代表进程运行于内核空间;2、内核态,运行于中断上下文,内核代表硬件运行于内核空间;3、用户态,运行于用户空间。
用户空间的应用程序,通过系统调用,进入内核空间。
这个时候用户空间的进程要传递很多变量、参数的值给内核,内核态运行的时候也要保存用户进程的一些寄存器值、变量等。
所谓的“进程上下文”,可以看作是用户进程传递给内核的这些参数以及内核要保存的那一整套的变量和寄存器值和当时的环境等。
硬件通过触发信号,导致内核调用中断处理程序,进入内核空间。
这个过程中,硬件的一些变量和参数也要传递给内核,内核通过这些参数进行中断处理。
所谓的“中断上下文”,其实也可以看作就是硬件传递过来的这些参数和内核需要保存的一些其他环境(主要是当前被打断执行的进程环境)。
关于进程上下文LINUX完全注释中的一段话:当一个进程在执行时,CPU的所有寄存器中的值、进程的状态以及堆栈中的内容被称为该进程的上下文。
当内核需要切换到另一个进程时,它需要保存当前进程的所有状态,即保存当前进程的上下文,以便在再次执行该进程时,能够必得到切换时的状态执行下去。
在LINUX中,当前进程上下文均保存在进程的任务数据结构中。
在发生中断时,内核就在被中断进程的上下文中,在内核态下执行中断服务例程。
但同时会保留所有需要用到的资源,以便中断服务结束时能恢复被中断进程的执行。
内核空间和用户空间是操作系统理论的基础之一,即内核功能模块运行在内核空间,而应用程序运行在用户空间。
现代的CPU都具有不同的操作模式,代表不同的级别,不同的级别具有不同的功能,在较低的级别中将禁止某些操作。
⽤户态线程和内核态线程的区别⽤户级线程“既然你已经看过线程的基本概念,那我就直接跳过这⼀部分了。
很久很久之前,线程的概念是出现了,但操作系统⼚商可不能直接就去修改操作系统的内核,因为对他们来说,稳定性是最重要的。
贸然把未经验证的东西加⼊内核,出问题了怎么办?所以想要验证线程的可⽤性,得另想办法。
”“我知道我知道,那些研究⼈员就编写了⼀个关于线程的函数库,⽤函数库来实现线程!”⼩⽩得意的说:“这个我刚刚在⽹上看到了。
”“是的,他们把创建线程、终⽌线程等功能放在了这个线程库内,⽤户就可以通过调⽤这些函数来实现所需要的功能。
”⼩明找了张纸,写上了⼏个函数:pthread_creat,pthread_exit ,pthread_join ,pthread_yield ,接着说:“这是⼏个重要的功能,我马上会讲到,你应该能⼤概猜出这些函数的功能吧?”“emmmm,让我想想,pthread_creat 是创建⼀个新线程,pthread_exit 是结束线程,pthread_join 嘛,我猜是准备运⾏,最后⼀个,我就不知道了。
”“不知道也没关系,⼀会你就清楚了。
”⼩明接着讲:“要知道,刚刚我们说的线程库,是位于⽤户空间的,操作系统内核对这个库⼀⽆所知,所以从内核的⾓度看,它还是按正常的⽅式管理。
”⼩⽩问道:“也就是说操作系统眼⾥还是只有进程喽?那我⽤线程库写的多线程进程,只能⼀次在⼀个 CPU 核⼼上运⾏?” (因为操作系统调度的是进程,每次只能调度不同的进程,所以同⼀个进程⾥的线程⽆法并⾏)⼩明点点头,说:“你说的没错,这其实是⽤户级线程的⼀个缺点,这些线程只能占⽤⼀个核,所以做不到并⾏加速,⽽且由于⽤户线程的透明性,操作系统是不能主动切换线程的,换句话讲,如果线程 A 正在运⾏,线程 B 想要运⾏的话,只能等待 A 主动放弃 CPU,也就是主动调⽤ pthread_yield 函数。
”注:对操作系统来说,⽤户级线程具有不可见性,也称透明性。
Linux 用户态与内核态的交互Linux用户态与内核态的交互2010-06-13 22:30Linux用户态与内核态的交互在Linux 2.4版以后版本的内核中,几乎全部的中断过程与用户态进程的通信都是使用netlink套接字实现的,例如iprote2网络管理工具,它与内核的交互就全部使用了netlink,著名的内核包过滤框架Netfilter在与用户空间的通读,也在最新版本中改变为netlink,无疑,它将是Linux用户态与内核态交流的主要方法之一。
它的通信依据是一个对应于进程的标识,一般定为该进程的ID。
当通信的一端处于中断过程时,该标识为0。
当使用netlink套接字进行通信,通信的双方都是用户态进程,则使用方法类似于消息队列。
但通信双方有一端是中断过程,使用方法则不同。
netlink套接字的最大特点是对中断过程的支持,它在内核空间接收用户空间数据时不再需要用户自行启动一个内核线程,而是通过另一个软中断调用用户事先指定的接收函数。
《UNIX Network Programming Volume 1-3rd Edition》第18章讲到BSD UNIX系统中routing socket的应用,这种套接字是按下面方式生成的:rt_socket=socket(AF_ROUTE,SOCK_RAW,0);然后就可以用它跟内核交互,进行网络环境管理的操作,如读取/设置/删除路由表信息,更改网关等等,但书中所列代码只在4.3BSD及以后版本的原始UNIX系统下可用,Linux虽然实现了AF_ROUTE族套接字,但用法却完全不同。
由于网上这方面知识的资料想对匮乏,现对Linux下routing socket的使用做一介绍。
由于我现在在MagicLinux1.0下工作,所以以下的讲解全部基于2.4.10内核。
Linux从v2.2开始引入这一机制,因此可以肯定从v2.2到v2.4的内核都是适用的,更新的v2.6我没有试过。
计算机组成原理八股文计算机操作系统内核态和用户态的区别用户态可以执行CPU调用的非特权指令内核态可以执行特权指令和非特权指令用户态到内核态的切换是通过中断实现的内核态到用户态的切换是通过特权指令实现的什么是操作系统中断?1.当发生中断时,CPU立即进入内核态2.当发生中断后,当前进程暂停运行,并由操作系统内核对中断进行处理3.对于不同的中断信号,会进行不同的处理4.中断分为内中断和外中断。
进程控制块PCB是什么?存放进程的管理和控制信息的数据结构称为进程控制块。
它是进程管理和控制的最重要的数据结构,每一个进程均有一个PCB,在创建进程时,建立PCB,伴随进程运行的全过程,直到进程撤消而撤消。
线程和进程的区别?1.进程是操作系统的最小调度单位,线程是CPU的最小调度单位2.一个进程包括多个线程,且当前进程下的线程共用一个内存空间3.进程间不会相互影响,但一个线程挂掉将导致整个进程挂掉4.进程可以扩展到多机,进程最多适合多核5.进程要比线程消耗更多的计算资源,同理线程要比携程消耗更多的计算资源6.进程使用的内存地址可以上锁,就是一个线程使用某些共享内存时,其它线程必须等它结束,才能使用这一块内存。
同步和互斥同步是指不同的进程之间必须按照规定的先后次序互斥是指不同的进程访问同一个资源时,临界资源只能有一个进程访问,其他需要等待该进程释放才可以访问进程调度算法有那些1.批处理系统1.1先来先服务就是按顺序来,有利于长作业的不利于短作业的,因为短作业必须等待前面长作业执行完毕才能执行,而长作业又需要执行很长时间,导致短作业等待时间过长。
1.2短作业优先长作业可能一直等待短作业执行完毕的状态,因为如果一直有短作业过来,那么长作业就会永远得不到调度1.3最短剩余时间优先它是抢占式的,按剩余时间的顺序进行调度,当有新的进程来,其整个运行时间与当前进程的剩余时间作比较,若新的进程需要的时间更短,则挂起当前进程,运行新的进程。
1.CPU的两种运行模式:内核态(又称核心态、系统态、管态)与用户态(又称目态)。
2.指令是控制计算机执行某种操作的命令。
3.特权指令:是一类具有特殊权限的指令,只用于操作系统或其他系统软件,普通用户不能直接使用4.非特权指令:也称为用户指令或普通指令,是普通用户能够直接使用的指令。
这是指令集中除特权指令外的所有指令。
5.操作系统的用户观点与系统观点:用户观点:为用户提供使用计算机系统的接口与各种资源管理服务(从系统外部看)系统观点:管理与分配计算机系统硬件及软件资源。
因此,操作系统是计算机资源的管理者(从系统内部看6.操作系统:是控制与管理计算机系统内各种硬件与软件资源、有效地组织多道程序运行的系统软件(或程序集合),是用户与计算机之间的接口。
功能:处理机管理、存储器管理、设备管理、文件管理、用户接口7.多道程序设计的基本思想:在内存中同时存放多道程序,在管理程序的控制下交替地执行。
这些作业共享CPU与系统中的其他资源。
8.多道批处理系统优缺点:优点:系统资源利用率高;系统吞吐量大。
缺点:用户作业等待时间长;无交互性,用户一旦提交作业就失去了对其运行的控制能力9.多道:系统在内存中存放多个作业,并且在外存上还保存大量的后备作业。
10.成批:系统按批次调度作业,而在系统运行过程中不允许用户与机器之间发生交互作用。
11.分时:对时间的共享。
在分时系统中,分时主要是指若干并发程序对CPU时间的共享12.Linux系统特点:与UNIX兼容;自由软件,源码公开;性能高,安全性强;便于定制与再开发;互操作性高;全面的多任务与真正的32位操作系统13.进程概念:程序在并发环境中的执行过程进程最根本的属性:是动态性与并发性进程的特征:动态性并发性独立性异步性批处理系统的特征:脱机多道成批处理分时系统的特征:多路性独立性及时性交互性14.进程间的相互关系主要分为如下三种形式:1.互斥——竞争同一资源而发生相互制约2. 同步——协同完成一项任务3. 通信——交换信息,合作完成一项工作15.进程与程序的区别与联系:(1)进程是动态概念,程序是静态概念(2)进程有并发性,程序没有(3)一个程序对应多个进程(4)进程有三个基本状态进程的三种状态及其转换16.进程控制块的作用:每个进程有唯一的进程控制块;操作系统根据PCB对进程实施控制与管理;进程的动态、并发等特征是利用PCB表现出来的;PCB是进程存在的唯一标识17.临界资源:一次仅允许一个进程访问的资源18.临界区:简称CS区进程中访问临界资源的那段程序代码19.原语是为完成某些特定的功能而编制的一段系统程序。
操作系统单选题1.操作系统:从计算机系统发展角度来看,操作系统的主要作用是提供虚拟机和扩展机。
从软件设计和开发角度来看,操作系统的主要作用是提供软件开发基础平台。
从计算机应用角度来看,操作系统的主要作用是提供人机交互接口。
从计算机安全保护角度来看,操作系统的主要作用是提供第一道安全防线2.操作系统作为系统软件,位于软件系统的硬件之上,支撑软件之下层面。
组成操作系统的主要部分是进程线程管理,内存管理,设备管理和文件管理。
在计算机配置操作系统的主要目的是提高计算机系统资源的利用率。
当操作系统位于核心态时既可以运行特权命令也可以运行任何非特权命令。
内核态和用户态是用于操作系统运行安全而设置的一种状态标记,其含义是指:在运行时所处的状态。
算术运算指令可以在用户态下执行。
在计算机系统当中,通常为匹配不同速度的外设,采用了缓冲技术,高速缓存(错)。
3.并发性:操作系统"并发性"是指进程在宏观上是同时运行,而在微观上是交替运行。
编译高级语言编写的程序不是操作系统具有的功能。
操作系统最基本的特征是并发性。
采用多道程序设计技术能够有效地提高系统的并发性。
4.操作系统接口:当用户在终端窗口通过输入命令来控制计算机运行时,使用的是操作系统的命令行接口。
操作系统作为系统软件,为用户提供了高效使用计算机的接口。
操作系统提供给用户的接口是命令输入和系统调用。
5.微内核结构:微内核结构是构造操作系统的方法,微内核结构表示的是客户机/服务器结构。
关于操作系统的结构,清晰的单向依赖和单向调动性不是微内核结构的特点。
6.内核:操作系统需要处理器从内核态转为用户态时,采用的是修改程序状态字。
既可以在内核态下运行又可以在用户态下运行的指令是置移位方向标志。
用户应用程序不属于操作系统内核程序。
在操作系统中,只能在内核态下运行的指令是关中断指令。
7.系统调用:系统调用时调用程序位于用户态,被调用程序位于核心态。
若要在屏幕上画一个红色的圈,需要使用系统调用。
⽤户态和内核态内核态:cpu可以访问内存的所有数据,包括外围设备,例如硬盘,⽹卡,cpu也可以将⾃⼰从⼀个程序切换到另⼀个程序。
⽤户态:只能受限的访问内存,且不允许访问外围设备,占⽤cpu的能⼒被剥夺,cpu资源可以被其他程序获取。
为什么要有⽤户态和内核态?由于需要限制不同的程序之间的访问能⼒, 防⽌他们获取别的程序的内存数据, 或者获取外围设备的数据, 并发送到⽹络, CPU划分出两个权限等级 -- ⽤户态和内核态。
⽤户态与内核态的切换所有⽤户程序都是运⾏在⽤户态的, 但是有时候程序确实需要做⼀些内核态的事情, 例如从硬盘读取数据, 或者从键盘获取输⼊等. ⽽唯⼀可以做这些事情的就是操作系统, 所以此时程序就需要先操作系统请求以程序的名义来执⾏这些操作.这时需要⼀个这样的机制: ⽤户态程序切换到内核态, 但是不能控制在内核态中执⾏的指令这种机制叫系统调⽤, 在CPU中的实现称之为陷阱指令(Trap Instruction)他们的⼯作流程如下:1. ⽤户态程序将⼀些数据值放在寄存器中, 或者使⽤参数创建⼀个堆栈(stack frame), 以此表明需要操作系统提供的服务.2. ⽤户态程序执⾏陷阱指令3. CPU切换到内核态, 并跳到位于内存指定位置的指令, 这些指令是操作系统的⼀部分, 他们具有内存保护, 不可被⽤户态程序访问4. 这些指令称之为陷阱(trap)或者系统调⽤处理器(system call handler). 他们会读取程序放⼊内存的数据参数, 并执⾏程序请求的服务5. 系统调⽤完成后, 操作系统会重置CPU为⽤户态并返回系统调⽤的结果当⼀个任务(进程)执⾏系统调⽤⽽陷⼊内核代码中执⾏时,我们就称进程处于内核运⾏态(或简称为内核态)。
此时处理器处于特权级最⾼的(0级)内核代码中执⾏。
当进程处于内核态时,执⾏的内核代码会使⽤当前进程的内核栈。
每个进程都有⾃⼰的内核栈。
当进程在执⾏⽤户⾃⼰的代码时,则称其处于⽤户运⾏态(⽤户态)。
内核态与用户态通讯方式主要有几种:1、procfs2、系统调用(syscall)3、netlink4、mmap5、驱动文件,统一APIproc 文件系统特点:虚拟文件系统,提供一种便捷的用户和内核间的交互方式,一般用于调试日志以及配置参数缺点:不够实时,无法传输大数据量使用:创建proc文件驱动,然后像操作文件一样操作,驱动负责解析应用层的read write 请求mmap特点:直接用户空间与内核空间映射,直接操作,无需拷贝,可传输数据量大,实时性好。
缺点:没有专门同步机制,需要配合别的操作使用,简单数据量不使用此方法,过于复杂使用:字符或者块设备驱动将内核空间地址提供mmap映射,此内核空间可在uboot中预留大空间,也可使用kmalloc(转小,连续物理内存) vmalloc(较大,连续虚拟内存,物理不连续)创建在Linux内核中, kmalloc能够分配的最大连续内存为2的(MAX_ORDER-1)次方个page(参见alloc_pages函数, "if (unlikely(order >= MAX_ORDER)) return NULL;"), page的大小一般是4K bytes, MAX_ORDER缺省定义为11, 所以如果不修改内核, kmalloc能够分配的最大连续内存一般是4M bytes.vmalloc 一般用于将非连续物理内存映射成连续虚拟内存空间以便普通使用,也有预留于超大内存>8GB,使用内核参数vmalloc=xxxM来将超大的空间用起来,64bit不存在这个问题了。
内核启动参数传递"mem="参数, 如"mem=80M", 预留部分内存; 然后通过request_mem_region和ioremap_nocache将预留的内存映射到模块中. 需要修改内核启动参数, 无需重新编译内核. 但这种方法不支持x86架构, 只支持ARM, PowerPC等非x86架构. request_mem_region只为了显示在/proc/iomem,只为了显示,不用也能正常用。
操作系统内核态和用户态
操作系统内核态和用户态几乎是考研试题中必考的题目,一般是一道选择题,但是在教材中对着一部分讲解的不是很全面。
在复习中(包括我在内),往往面临两难的问题,一方面教材上的内容较少,另一方面网上的东西又太多,看的时候又不知所措。
所在在这里给大家把这一块的知识点总结一下,希望能给大家带来一些启迪,同时也欢迎大家一起讨论。
一、操作系统结构:
操作系统的发展大致经历了无结构操作系统(第一代),模块化的操作系统(第二代),分层式结构(第三代),这些称为传统操作系统结构。
而微内核操作系统是现代操作系统结构,他是在C/S(客户端/服务器)这种架构方式上发展起来的。
传统操作系统的内容,大家只需要了解就可以了。
重点在微内核操作系统。
二、微内核操作系统
微内核操作系统往往采用的是C/S模式,它把操作系统分为微内核和多个服务器。
微内核主要用于(1)实现与硬件紧密相关的处理,(2)实现一些较基本的功能,(3)负责客户和服务器之间的通信。
内核的功能:
(1)进程(线程)管理(进程或者线程的调度)
(2)低级存储器管理(用户程序逻辑空间到内存空间的物理地址的变换)
(3)中断和陷入管理(中断和陷入)
由于微内核结构的存在,那么程序就运行在两种不同的地方,内核态和用户态,内核态与用户态是操作系统的两种运行级别,跟intel cpu没有必然的联系。
三、内核态和用户态
内核态:当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态(或简称为内核态)。
其他的属于用户态。
用户程序运行在用户态,操作系统运行在内核态.(操作系统内核运行在内核态,而服务器运行在用户态)。
用户态不能干扰内核态.所以CPU指令就有两种,特权指令和非特权指令.不同的状态对应不同的指令。
特权指令:只能由操作系统内核部分使用,不允许用户直接使用的指令。
如,I/O指令、置终端屏蔽指令、清内存、建存储保护、设置时钟指令(这几种记好,属于内核态)。
非特权指令:所有程序均可直接使用。
所以:
系统态(核心态、特态、管态):执行全部指令。
用户态(常态、目态):执行非特权指令。
2. 用户态和内核态的转换
1)用户态切换到内核态的3种方式
a. 系统调用
这是用户态进程主动要求切换到内核态的一种方式,用户态进程通过系统调用申请使用操作系统提供的服务程序完成工作,比如前例中fork()实际上就是执行了一个创建新进程的系统调用。
而系统调用的机制其核心还是使用了操作系统为用户特别开放的一个中断来实现,例如Linux的int 80h中断。
b. 异常
当CPU在执行运行在用户态下的程序时,发生了某些事先不可知的异常,这时会触发由当
前运行进程切换到处理此异常的内核相关程序中,也就转到了内核态,比如缺页异常。
c. 外围设备的中断
当外围设备完成用户请求的操作后,会向CPU发出相应的中断信号,这时CPU会暂停执行下一条即将要执行的指令转而去执行与中断信号对应的处理程序,如果先前执行的指令是用户态下的程序,那么这个转换的过程自然也就发生了由用户态到内核态的切换。
比如硬盘读写操作完成,系统会切换到硬盘读写的中断处理程序中执行后续操作等。
四、常见的内核态常见总结:
前文已经提到,内核的功能:
(1)进程(线程)管理(进程或者线程的调度)
(2)低级存储器管理(用户程序逻辑空间到内存空间的物理地址的变换)
(3)中断和陷入管理(中断和陷入)
具体的:
(1)I/O指令、置终端屏蔽指令、清内存、建存储保护、设置时钟指令。
(2)中断、异常、陷入,比如缺页中断等
(3)进程(线程)管理
(4)系统调用,比如调用了设备驱动程序
(5)用户内存地址的转换(逻辑---> 物理映射)
以前考过的真题:
1、用户在程序中试图读某文件的第100个逻辑块,使用操作系统提供的()接口
A:系统调用B:图形用户接口C:原语D:键盘命令
解析:程序需要读取第100个逻辑块,这里发生了逻辑地址到物理地址的转换,必然要进入到内核态执行转换,所以必然要进入到内核态,在四个选型中,只有A系统调用才能进入到内核态。
所以A入选。
图形用户接口是用户接口,他是获得操作系统提供的服务一种方式,但是要想获得操作系统的服务,在底层仍然是使用的系统调用。
2、在中断发生后,进入中断处理的程序属于:()
A:用户程序B:可能是应用程序,也可能是操作系统程序
C:操作系统程序D:既不是是应用程序,也不是操作系统程序
解析:中断的处理是由操作系统内核来处理的,这是操作系统内核最基本的功能之一,所以只能是操作系统程序。
从这些题目中,可以看出,理解内核态和用户态的基本的概念,区分好他们不同的情景,并且掌握内核态的典型场景,就可以做好这一类的题目。