精华内容
下载资源
问答
  • 系统调用发生在用户态
    2020-12-16 15:01:21

    1)示例

    void testfork()
    {  
        if(0 = = fork())
        {  
            printf(“create new process success!\n”);  
        }
        printf(“testfork ok\n”);  
    }  
    
    

    这段代码很简单,从功能的角度来看,就是实际执行了一个fork(),生成一个新的进程,从逻辑的角度看,就是判断了如果fork()返回的是则打印相关语句,然后函数最后再打印一句表示执行完整个testfork()函数。代码的行逻辑和功能上看就是如此简单,一共四行代码,从上到下一句一句执行而已。

    2)特权级

    如果说前面两种是静态观察的角度看的话,我们还可以从动态的角度来看这段代码,即它被转换成CPU执行的指令后加载执行的过程,这时这段程序就是一个动态执行的指令序列。而究竟加载了哪些代码,如何加载就是和操作系统密切相关了。

    熟悉Unix/Linux系统的人都知道,fork的工作实际上是以系统调用的方式完成相应功能的,具体的工作是由sys_fork负责实施。其实无论是不是Unix或者Linux,对于任何操作系统来说,创建一个新的进程都是属于核心功能,因为它要做很多底层细致地工作,消耗系统的物理资源,比如分配物理内存,从父进程拷贝相关信息,拷贝设置页目录页表等等,这些显然不能随便让哪个程序就能去做,于是就自然引出特权级别的概念,显然,最关键性的权力必须由高特权级的程序来执行,这样才可以做到集中管理,减少有限资源的访问和使用冲突。

    特权级显然是非常有效的管理和控制程序执行的手段,因此在硬件上对特权级做了很多支持,就Intel x86架构的CPU来说一共有0~3四个特权级,0级最高,3级最低,硬件上在执行每条指令时都会对指令所具有的特权级做相应的检查,相关的概念有 CPL、DPL和RPL。硬件已经提供了一套特权级使用的相关机制,软件自然就是好好利用的问题,这属于操作系统要做的事情,对于 Unix/Linux来说,只使用了0级特权级和3级特权级。也就是说在Unix/Linux系统中,一条工作在级特权级的指令具有了CPU能提供的最高权力,而一条工作在3级特权级的指令具有CPU提供的最低或者说最基本权力。

    3)用户态和内核态

    为什么用户态到内核态切换消耗大?
    内核态和用户态有自己的内存映射,即自己的地址空间。
    用户空间的应用程序,通过系统调用,进入内核空间。由内核代表该进程运行于内核空间,这就涉及到上下文的切换,用户空间和内核空间具有不同的地址映射,通用或专用的寄存器组,而用户空间的进程要传递很多变量、参数给内核,内核也要保存用户进程的一些寄存器、变量等,以便系统调用结束后回到用户空间继续执行。

    所谓的“进程上下文”,就是一个进程在执行的时候,CPU的所有寄存器中的值、进程的状态以及堆栈上的内容,当内核需要切换到另一个进程时,它需要保存当前进程的所有状态,即保存当前进程的进程上下文,以便再次执行该进程时,能够恢复切换时的状态,继续执行。

    现在我们从特权级的调度来理解用户态和内核态就比较好理解了,当程序运行在3级特权级上时,就可以称之为运行在用户态,因为这是最低特权级,是普通的用户进程运行的特权级,大部分用户直接面对的程序都是运行在用户态;反之,当程序运行在级特权级上时,就可以称之为运行在内核态。

    虽然用户态下和内核态下工作的程序有很多差别,但最重要的差别就在于特权级的不同,即权力的不同。运行在用户态下的程序不能直接访问操作系统内核数据结构和程序,比如上面例子中的testfork()就不能直接调用 sys_fork(),因为前者是工作在用户态,属于用户态程序,而sys_fork()是工作在内核态,属于内核态程序。

    当我们在系统中执行一个程序时,大部分时间是运行在用户态下的,在其需要操作系统帮助完成某些它没有权力和能力完成的工作时就会切换到内核态,比如testfork()最初运行在用户态进程下,当它调用fork()最终触发 sys_fork()的执行时,就切换到了内核态。

    4)用户态和内核态的转换

    1.用户态切换到内核态的3种方式

    a. 系统调用

    这是用户态进程主动要求切换到内核态的一种方式,用户态进程通过系统调用申请使用操作系统提供的服务程序完成工作,比如前例中fork()实际上就是执行了一个创建新进程的系统调用。而系统调用的机制其核心还是使用了操作系统为用户特别开放的一个中断来实现,例如Linux的int 80h中断。

    b. 异常

    当CPU在执行运行在用户态下的程序时,发生了某些事先不可知的异常,这时会触发由当前运行进程切换到处理此异常的内核相关程序中,也就转到了内核态,比如缺页异常。

    c. 外围设备的中断

    当外围设备完成用户请求的操作后,会向CPU发出相应的中断信号,这时CPU会暂停执行下一条即将要执行的指令转而去执行与中断信号对应的处理程序,如果先前执行的指令是用户态下的程序,那么这个转换的过程自然也就发生了由用户态到内核态的切换。比如硬盘读写操作完成,系统会切换到硬盘读写的中断处理程序中执行后续操作等。

    这3种方式是系统在运行时由用户态转到内核态的最主要方式,其中系统调用可以认为是用户进程主动发起的,异常和外围设备中断则是被动的。

    2.具体的切换操作

    从触发方式上看,可以认为存在前述3种不同的类型,但是从最终实际完成由用户态到内核态的切换操作上来说,涉及的关键步骤是完全一致的,没有任何区别,都相当于执行了一个中断响应的过程,因为系统调用实际上最终是中断机制实现的,而异常和中断的处理机制基本上也是一致的,关于它们的具体区别这里不再赘述。关于中断处理机制的细节和步骤这里也不做过多分析,涉及到由用户态切换到内核态的步骤主要包括:

    [1] 从当前进程的描述符中提取其内核栈的ss0及esp0信息。

    [2] 使用ss0和esp0指向的内核栈将当前进程的cs,eip,eflags,ss,esp信息保存起来,这个 过程也完成了由用户栈到内核栈的切换过程,同时保存了被暂停执行的程序的下一 条指令。

    [3] 将先前由中断向量检索得到的中断处理程序的cs,eip信息装入相应的寄存器,开始 执行中断处理程序,这时就转到了内核态的程序执行了。

    更多相关内容
  • 3. 系统调用

    千次阅读 2020-08-11 21:15:56
    什么是系统调用 系统调用也叫广义指令 系统调用是操作系统提供给应用程序的一个接口 应用程序通过这个接口向操作系统申请内核服务 #mermaid-svg-XbG78Dy1cD3ZzdyO .label{font-family:'trebuchet ms', verdana, ...

    什么是系统调用

    • 系统调用也叫广义指令
    • 系统调用是操作系统提供给应用程序的一个接口
    • 应用程序通过这个接口向操作系统申请内核服务
    应用程序
    系统调用
    操作系统内核程序

    什么功能要用系统调用实现

    • 与共享资源有关的操作(如内存分配,I/O操作,文件管理等),都必须通过系统调用的方式向操作系统内核提出服务请求,由操作系统内核代为完成
    • 其实就是只要你想使用共享资源,就要进行系统调用

    系统调用的好处

    • 系统调用可以保证系统的稳定性和安全性,防止用户的非法操作

    系统调用的过程

    1. 传参

    • 指明系统调用的类型

    2. 陷入指令

    • 该指令只能在用户态下使用,引发陷入内中断,使CPU进入核心态
    • 该指令也叫trap指令访管指令

    3. 执行系统调用

    • 在核心态下完成

    4. 返回用户态,继续执行程序

    • 其实是通过中断服务程序在中断处理结束后返回到断点

    系统调用和库函数的区别与联系

    库函数系统调用
    由编程语言提供由操作系统提供
    由应用程序调用由应用程序调用
    运行在用户态运行在核心态
    有的库函数封装了系统调用,有的没有

    库函数和系统调用的区别与联系:
    库函数和系统调用的区别与联系

    题目

    1.下列关于操作系统的说法,正确的是

    Ⅰ.在通用操作系统管理下的计算机上运行程序,需要向操作系统预定运行时间
    Ⅱ.在通用操作系统管理下的计算机上运行程序,需要确定起始地址,并从这个地址开始执行
    Ⅲ.操作系统需要提供高级程序设计语言的编译器
    Ⅳ.管理计算机系统资源是操作系统关心的主要问题

    【分析】:
    Ⅰ.在通用操作系统管理下的计算机上运行程序,不需要向操作系统预定运行时间,因为通用操作系统采用时间片轮转调度算法,由操作系统进行时间管理,不需用户预定
    Ⅱ.每一个程序运行都需要确定程序的起始地址,并从这个地址开始运行
    Ⅲ.高级程序语言的编译器是应用程序,操作系统不需要提供
    Ⅳ.操作系统的主要功能有:系统资源的管理者,提供人机接口,作为扩充机器,所以,进行系统资源管理是操作系统主要关心的问题

    2.下列说法正确的是

    Ⅰ.批处理的主要缺点是需要大量内存
    Ⅱ.当计算机提供了核心态和用户态时,输入/输出指令必须在核心态下运行
    Ⅲ.操作系统中采用多道程序设计技术的最主要原因是为了提高CPU和外部设备的可靠性
    Ⅳ.操作系统中,通道技术是一种硬件技术

    【分析】:
    Ⅰ.批处理的主要缺点是不可以人机交互
    Ⅱ.输入/输出指令属于访问系统资源的指令,所以必须在核心态下运行
    Ⅲ.操作系统中采用多道程序设计技术的最主要原因是为了系统的利用率和吞吐量
    Ⅳ.I/O通道实际上是一种特殊的处理器,它具有执行I/O指令的能力,并通过通道程序控制I/O操作

    3.下列操作系统的各个功能组成部分中,()可不需要硬件的支持

    A.进程调度
    B.时钟管理
    C.地址映射
    D.中断系统

    【分析】:
    A.进程调度:使用进程调度算法即可完成,由操作系统实现这个功能,不需要硬件支持
    B.时钟管理:重置时钟,时钟分频等操作需要通过晶振来实现
    C.D:中断指令和地址映射的重定位离不开硬件支持

    4.【2011统考真题】下列选项中,在用户态执行的是

    A.命令解释程序
    B.缺页处理程序
    C.进程调度程序
    D.时钟中断处理程序

    【分析】:
    A.命令解释程序:属于命令接口,可以面向用户
    B,D都属于中断处理程序;C属于操作系统内核程序

    5.【2012统考真题】下列选项中,不可能在用户态发生的事件是

    A.系统调用
    B.外部中断
    C.进程切换
    D.缺页

    【分析】
    系统调用发生在用户态,执行在内核态;
    外部中断也可以发生在用户态,执行在内核态;
    进程切换一定发生并且执行在内核态,这是操作系统的内核程序;
    缺页也是发生在用户态,在内核态处理;

    6.只能在核心态下运行的指令是

    A.读时钟指令
    B.置时钟指令
    C.取数指令
    D.寄存器清零

    【分析】
    A.读取时钟,这个操作只涉及到读命令,普通的应用程序也可以执行
    B.置时钟,这个操作涉及到改变时钟的值,属于特权指令,如果应用程序可以执行此条指令,那么它可以无限次重置自己的时间片,那他就永远都不会结束掉,这显然是不允许的
    C.取数指令,在进行普通的数据相加时,都会涉及到取数操作,这在用户态下也是可以运行的
    D.寄存器清零,进程完成切换后,必然要进行寄存器清零,不然自己的数据就会出现问题;并且,对于通用寄存器而言,一个程序执行了寄存器清零指令,只是将自己执行过程中的寄存器的值清零了,并不会对其他进程的寄存器的值产生影响,因为其他进程的寄存器的值已经被保存了。

    7.【2015统考真题】假定下列指令已装入指令寄存器,则执行时不可能导致CPU从用户态变为核心态的是

    A.DIV R0,R1		;(R0)/(R1)->R0
    B.INT n			;产生软中断
    C.NOT R0		;寄存器R0的内容取反
    D.MOV R0,addr	;把地址addr的内存数据放入寄存器R0
    

    【分析】
    A.进行除法运算,可能产生除0错误,会触发状态变换
    B.软中断,会触发状态变换
    C.取反操作,不会有状态变换
    D.可能产生缺页,也会触发状态变换

    参考文献

    [1] 王道论坛,2021年操作系统考研复习指导[M]. 北京:电子工业出版社,2020.1

    展开全文
  • 用户态进程通过系统调用申请使用操作系统程序完成工作。系统调用的机制其核心还是使用了操作系统为用户开放的中断来实现,例如Linux的int 80h中断。 2 外围设备的中断 当外围设备接收到用户请求后,会向CPU发出相应...

    1、用户态与内核态

    根据进程访问资源的特点,我们可以把进程在系统上的运行分为用户态、内核态

    1.1 用户态

    • 用户态(user mode) :当进程执行用户自己的代码时,则该进程处于用户态。用户态运行的进程可以直接读取用户程序的数据,但是,这时cpu访问资源受限

    1.2 内核态

    • 系统态(kernel mode):当进程执行系统内核代码时,则该进程处于内核态。系统态运行的进程或程序几乎可以访问计算机的任何资源,不受限制,这时cpu可以访问计算机的所有资源

    2、用户态与内核态的转换

    2.1 系统调用

    用户态进程通过系统调用申请使用系统态级别的资源,并由操作系统程序代为完成。系统调用使用了操作系统为用户开放的中断来实现,例如Linux的int 80h中断。

    在运行的用户态程序中,凡是与系统态级别的资源有关的操作(如文件管理、进程控制、内存管理等),都必须通过系统调用方式向操作系统提出服务请求,并由操作系统代为完成。这些系统调用按功能大致可分为如下几类:

    • 设备管理。完成设备的请求或释放,以及设备启动等功能。
    • 文件管理。完成文件的读、写、创建及删除等功能。
    • 进程控制。完成进程的创建、撤销、阻塞及唤醒等功能。
    • 进程通信。完成进程之间的消息传递或信号传递等功能。
    • 内存管理。完成内存的分配、回收以及获取作业占用内存区大小及地址等功能。

    在这里插入图片描述

    2 外围设备的中断

    当外围设备接收到用户请求后,会向CPU发出相应的中断信号,这时CPU会暂停执行下一条即将要执行的指令,转而去执行与中断信号对应的处理程序,如果先前执行的指令是用户态程序,那么这个转换的过程自然也就发生了由用户态到内核态的切换。比如需要进行硬盘读写操作时,系统会切换到硬盘读写的中断处理程序

    3 异常

    当CPU在执行用户态程序时,发生了某些事先不可知的异常,这时会触发由当前运行进程切换到处理此异常的内核相关程序中,也就转到了内核态,比如缺页异常。

    展开全文
  • 文章目录Unix/Linux的体系架构Linux系统调用简述系统调用号与系统调用表内核态与用户态内核态与用户态的转换 Unix/Linux的体系架构 如上图所示,从宏观上来看,Linux操作系统的体系架构分为用户态和内核态(或者...

    Unix/Linux的体系架构

    如上图所示,从宏观上来看,Linux操作系统的体系架构分为用户态内核态(或者用户空间和内核)。内核从本质上看是一种软件——控制计算机的硬件资源,并提供上层应用程序运行的环境。用户态即上层应用程序的活动空间,应用

    展开全文
  • 系统调用(System Call)是操作系统为在用户态运行的进程与硬件设备(如CPU、磁盘、打印机等)进行交互提供的一组接口。当用户进程需要发生系统调用时,CPU 通过软中断切换到内核态开始执行内核系统调用函数。下面...
  • 由于操作系统的管理工作(比如进程切换、分配i/o设备等)需要使用特权指令,因此CPU要从用户态转为核心态。 中断可以使CPU从用户态切换为核心态,使操作系统获得计算机的控制权。有了中断,才能实现多道程序并发执行...
  • 系统调用接口调用软中断指令“int $ Ox80”时,这个指令会发生一个中断向量码为128的中断请求,并中断响应过程中将进程由用户态切换为内核态。  因为Linux只允许系统调用接口使用128这一个软中断向量,这也就...
  • 用户态到内核态发生在中断产生时,内核态到用户态的转化发生在中断返回到用户程序的时候 关于中断 中断是指程序执行过程中CPU对系统发生的某个事件做出的一种响应。有以下特点: 1.中断时随机的 2.中断时可以恢复...
  • 那就得说说系统调用 先看下面简单的一个图,cpu主要从内存拉取数据执行,将返回结果返回给内存,是我们程序的执行过程(今天重点不是这) 我们的程序分为 系统程序kernel(内核程序,操作系统自带的程序) 和 用户...
  • 操作系统——系统调用

    千次阅读 2021-12-28 19:51:56
    1.简介 操作系统作为用户和计算机的接口,需要向上提供一些简单易用的服务,主要包括命令接口和程序接口。其中,程序接口由一组系统调用组成 ...解决混淆的方法:操作系统提供系统调用功能,用户进程想要使用打印
  • 系统调用需要发生状态的转换,过程调用只需要在用户态就可以完成,过程调用也称为函数调用。 只能内核态执行的指令:凡是涉及到计算机根本运行的事情都应该内核态下执行, 下列指令中,哪些只能内核态运行? 读...
  • 操作系统它基于CPU之上,只用到了CPU的两种状态,一个内核态,一个用户态,内核态运行CPU的第 0 等级,用户态运行CPU的第 3 等级。 2.操作系统用户态和内核态之间的切换 首先内核态与用户态是操作系统的两...
  • Linux 系统调用的执行过程

    千次阅读 2022-01-27 11:07:18
    Linux 中,除了异常和陷入外,系统调用用户空间访问内核的唯一手段。 实际上,其他的像设备文件和 /proc 之类的方式,最终也还是要通过系统调用的方式进行访问。 系统调用 Linux 中,每个系统调用被赋予一...
  • 操作系统接口之系统调用

    千次阅读 2021-10-30 11:45:20
    系统调用,是用户在程序中调用操作系统所提供的一些子功能 这是特殊的过程调用,由特殊的机器指令实现 这个指令还将系统转入管 系统调用程序是一个低级过程,只能由汇编语言直接访问 系统调用是操作系统提供给编程...
  • 用户态和内核态切换

    千次阅读 2020-12-22 21:30:27
    异常:如果当前进程运行在用户态,如果这个时候发生了异常事件,会触发由当前运行进程切换到处理此异常的内核相关进程中 外围设备中断:外围设备完成用户请求的操作之后,会向CPU发出中断信号,这
  • Linux内核之系统调用

    千次阅读 2022-04-20 13:28:01
    系统调用在用户空间进程和硬件设备之间添加了一个中间层,作用如下 为用户空间提供了硬件的抽象界面,当需要读文件时,应用程序可以不用管磁盘类型和介质,甚至不用去管文件所在的文件系统是哪种类型 系统调用保证...
  • 当然,这些任务实际上并不是真的同时运行,而是因为系统在很短的时间内,将 CPU 轮流分配给它们,造成多任务同时运行的错觉。 而每个任务运行前,CPU 都需要知道任务从哪里加载、又从哪里开始运行,也就是说,...
  • 前言 如果你对这篇文章可感兴趣,可以点击「【访客必读 - 指引页】一文囊括主页内所有高质量博客...Nachos 应用程序的方法2.2 Nachos 应用程序2.3 页表2.4 用户进程的创建与启动2.4.1 StartProcess 函数2.4.2 Instructi
  • 计算机操作系统之系统调用

    千次阅读 2021-12-01 16:52:03
    目录 ????什么是系统调用,有何作用?...“系统调用”是操作系统提供给应用程序(程序员/编程人员)使用的接口,可以理解为一种可供应用程序调用的特殊函数,应用程序可以发出系统调用请求来获得操作系统的服务。
  • 内核响应系统调用是一个怎样的过程? …… 而且这个问题还关联到了我们后面要学习的多线程、I/O 模型、网络优化等。 所以这是一道很不错的面试题目,它不是简单考某个概念,而是通过让求职者比较两种东西,从而...
  • 二、微内核操作系统三、内核态和用户态用户态和内核态的转换四、常见的内核态常见总结:相关概念:操作系统的运行机制中断和异常的概念系统调用用户栈和内核栈中断机制中断机制的原理多级中断自陷指令 操作系统之内...
  • 系统调用

    万次阅读 多人点赞 2019-03-02 17:47:48
    程序接口通常是由各种类型的系统调用所组成的,因而,也可以说,系统调用提供了用户程序和操作系统之间的接口,应用程序通过系统调用实现其与 OS 的通信,并可取得它的服务。 处理器(CPU)=运算器+控制器+...
  • 何天杨+ 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程...系统调用和普通库函数调用非常相似,只是系统调用由操作系统核心提供,运行于核心态,而普通的函数调用由函数库或用户自己提供,运行于用户
  • 若一个用户进程通过read系统调用读取一个磁盘文件中的数据,则下列关于此过程的叙述中,正确的是( A ) Ⅰ. 若该文件的数据不内存,则该进程进入睡眠...Ⅱ:read系统调用通过陷入将CPU从用户态切换到核心态,从而获
  • 【Linux系统编程】Linux系统调用

    千次阅读 多人点赞 2019-09-22 20:52:34
    用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务,比如用户可以通过文件系统相关的调用请求系统打开文件、关闭文件或读写文件,可以通过时钟相关的系统调用获得系统时间或设置定时器等。 ...
  • 系统调用的概念及原理

    千次阅读 多人点赞 2019-10-31 16:48:30
    系统调用用户进程进入内核的接口层,它本身并非内核函数,但它是由内核函数实现的,进入内核后,不同的系统调用会找到相应的内核函数,这些内核函数被称为系统调用的“服务例程”。 比如系统调用getpid()实际调用...
  • 用户态:当进程执行用户自己的代码时,则称其处于用户态,这时cpu 访问资源有限,运行在用户态下的程序不能直接访问操作系统内核数据结构和程序。 内核态:当一个任务(进程)执行系统调用而陷入内核代码中执行时,...
  • Linux系统的内核态和用户态

    千次阅读 2017-10-10 17:19:01
     如上图所示,从宏观上来看,Linux操作系统的体系架构分为用户态和内核态(或者用户空间和内核)。内核从本质上看是一种软件——控制计算机的硬件资源,并提供上层应用程序运行的环境。用户态即上层应用程序的活动...
  • 系统调用原理及详细过程

    千次阅读 多人点赞 2020-07-09 21:24:23
    系统调用原理及详细过程 为什么要有系统调用? 由于系统的有限资源可能被多个不同的应用程序访问,因此,如果不加以保护,那么用程序难免产生冲突。所以,现代操作系统都将可能产生冲突的系统资源给保护起来,阻止...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 106,706
精华内容 42,682
热门标签
关键字:

系统调用发生在用户态

友情链接: matlab.rar