本文目录一览

1,什么是操作系统的核心态什么是用户态

在处理器的存储保护中,核心态,或者特权态(与之相对应的是用户态),是操作系统内核所运行的模式。运行在该模式的代码,可以无限制地对系统存储、外部设备进行访问。 就是一二级缓存里存的东西

什么是操作系统的核心态什么是用户态

2,函数调用的用户空间用户态和内核空间内核态

操作系统的进程空间可分为用户空间和内核空间,它们需要不同的执行权限。其中函数调用运行在用户空间。
个人愚见:printf为标准c库提供的函数,应该不属于内核态。而printf应该是调用linux的系统调用write实现的,write系统调用为系统态。自己写的函数属于用户代码吧。

函数调用的用户空间用户态和内核空间内核态

3,什么是内核态和用户态

运行在cpu特权等级r0的程序称运行在内核态kernel mode;运行在r3的称为运行在用户态。也叫内核模式,用户模式
在单内核模式系统中,操作系统提供服务的流程为(即用户应用程序调用系统内核功能):应用主程序使用指定的参数执行系统调用指令(int x80),使cpu从用户态(user mode)切换到核心态(),然后系统根据参数值调用特定的系统调用服务程序,而这些服务程序则根据需要调用底层的支持函数以完成特定的功能。在完成了应用程序要求的服务后,操作系统又从核心态切换回用户态,回到应用程序中继续执行后续指令。

什么是内核态和用户态

4,如何判定一个进程是用户态或者内核态

对于一个处于RUNNING状态的进程, 如果此时它没有占用CPU, 则在上次发生进程切换时, 它可能运行于用户态或内核态. 假设在发生进程切换时它运行于内核态, 那它可能是通过系统调用或者是异常(如缺页异常)的方式进入到内核态的. 又假设在发生进程切换时它运行于用户态, 那它只能是通过中断进入到内核态. 进而被切换掉. 而通过中断 系统调用或异常这三种方式进入到内核态时, 有一个不同之处就在于在压栈时, 内核栈中的出错代码那个地方. 如果是由于中断进入到内核, 那么在该进程的内核栈的EIP指针下面压入栈的值应该是 (中断号-256)而如果是由于异常进入到内核的, 那么在该位置处, 压入栈的值应该是异常的出错代码, 并且在压栈时会将其再设置为-1; 如果是由于系统调用进入到内核的, 那么在该位置处, 其值为系统调用号.

5,为什么要区分核心态和用户态

在处理器的存储保护中,核心态或者特权态,是操作系统内核所运行的模式。运行在该模式的代码,可以无限制地对系统存储、外部设备进行访问。 就是一二级缓存里存的东西。也就是说当CPU正在运行内核代码时我们就称系统处于内核态,而当CPU正运行用户代码时则称系统处于用户态。
当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态(或简称为内核态)。此时处理器处于特权级最高的(0级)内核代码中执行。当进程处于内核态时,执行的内核代码会使用当前进程的内核栈。每个进程都有自己的内核栈。当进程在执行用户自己的代码时,则称其处于用户运行态(用户态)。即此时处理器在特权级最低的(3级)用户代码中运行。当正在执行用户程序而突然被中断程序中断时,此时用户程序也可以象征性地称为处于进程的内核态。因为中断处理程序将使用当前进程的内核栈。这与处于内核态的进程的状态有些类似。

6,内核态的定义是什么用户态的定义

当一个任务(进程)执行系统调用而执行内核代码时,称进程处于内核内核态,此时处理器处于特权级最高的(0级)内核代码中执行,当进程处于内核态时,执行的内核代码会使用当前进程的内核栈,每个进程都有自己的内核栈。当进程执行用户代码时,称其处于用户态,此时处理器在特权级最低的(3级)用户代码中运行。当正在执行用户程序而突然被中断程序中断时,此时用户程序也可以象征性地称为处于进程的内核态,因为中断处理程序将使用当前进程的内核栈。这与处于内核态的进程的状态有些类似。内核态与用户态是操作系统的两种运行级别,跟intel cpu没有必然的联系,intel cpu提供Ring0-Ring3三种级别的运行模式,Ring0级别最高,Ring3最低。Linux使用了Ring3级别运行用户态,Ring0作为内核态,没有使用Ring1和Ring2。Ring3状态不能访问Ring0的地址空间,包括代码和数据。Linux进程的4GB地址空间,3G-4G部分大家是共享的,是内核态的地址空间,这里存放在整个内核的代码和所有的内核模块,以及内核所维护的数据。用户运行一个程序,该程序所创建的进程开始是运行在用户态的,如果要执行文件操作,网络数据发送等操作,必须通过write,send等系统调用,这些系统调用会调用内核中的代码来完成操作,这时,必须切换到Ring0,然后进入3GB-4GB中的内核地址空间去执行这些代码完成操作,完成后,切换回Ring3,回到用户态。这样,用户态的程序就不能随意操作内核地址空间,具有一定的安全保护作用。保护模式,通过内存页表操作等机制,保证进程间的地址空间不会互相冲突,一个进程的操作不会修改另一个进程的地址空间中的数据。在内核态下,CPU可执行任何指令,在用户态下CPU只能执行非特权指令。当CPU处于内核态,可以随意进入用户态;而当CPU处于用户态,只能通过中断的方式进入内核态。一般程序一开始都是运行于用户态,当程序需要使用系统资源时,就必须通过调用软中断进入内核态.使用nm查看用户态程序的符号表内容使用System.map(内核符号表)查看内核符号表内容1. 测试程序中打印用户态函数地址,并调用系统调用(在内核中打印系统调用函数地址),用"用户态符号表"和"内核态符号表"示例说明内核态和用户态地址空间的差异2. 说明内核态地址映射ioremap();用户态地址映射mmap()

文章TAG:用户态  什么是操作系统的核心态什么是用户态  
下一篇