zoukankan      html  css  js  c++  java
  • 操作系统知识点_用户编程接口

    3、用户编程接口

    函数调用和系统调用

      函数调用运行在用户空间,为程序员提供调用真正的幕后完成实际事务的是系统调用接口。系统函数是内核提供给应用程序的接口,属于系统的一部分。

    函数调用:调用函数库中的一段程序或函数;与用户程序联系;在用户地址空间执行;运行时间属于“用户时间”;属于过程调用,系统开销小;

    系统调用:各个系统的系统调用是不同的;调用系统的内核服务;是操作系统的入口点;在内核地址空间执行;“系统”时间;在用户和内核空间切换开销大;unix中有大约90个。如fork,write,brk chdir等

    用户态和核心态

    用户态:非特权态。访问受限。系统调用和中段可进入核心态。可靠性安全性要求低,维护简单。

    核心态:特权态。拥有系统资源的状态。可以访问内存所有数据,内核数据结构,如进程表等。CPU可执行任何指令,可随意进入用户态。可靠性和安全性要求高,维护管理复杂。

    切换过程:用户程序在用户态运行,但是有时候需要做一些内核态做的事情,程序就需要向操作系统请求执行这些操作,这时候就需要用户态切换到内核态。

    用户栈和核心栈

      内核在创建进程时,会为进程创建相应的堆栈。每个进程会有两个栈:用户栈,存在于用户空间;核心栈,存在于内核空间。当进程运行在用户态,CPU堆栈指针寄存器里面的内容是用户栈的地址;当运行在核心态,则为核心栈地址。

      中断或系统调用,进程会陷入内核态。此时,进程使用的堆栈也要从用户栈转到内核栈。进程陷入内核态后,1、用户态堆栈地止保存在内核栈中;2、设置堆栈指针寄存器内容为内核堆栈地址。完成用户栈转向内核栈。进程从内核回到用户态时,吧内核栈中保存的用户堆栈地址恢复到堆栈指针寄存器即可。

    注:当进程陷入内核时,内核栈保存进程在内核态运行的信息;当进程返回用户态时后,内核栈中保存的信息无效,会全部恢复。因此每次进程从用户陷入内核时得到的内核栈都是空的。所以在进程陷入和内核时,直接把内核栈的栈顶地址给堆栈指针寄存器就可以了。

    静态链接与动态链接

      静态链接:把要调用的函数或过程放进exe文件中;相同调用时会多个拷贝。(.lib文件)

      动态链接:加入函数的描述信息(重定位信息)。运行时,简历程序与动态链接库的连接关系。(.dll文件)

      

  • 相关阅读:
    [方法] 如何做产品功能设计
    js如何去除一个数组中与另一个数组中的值相同的元素
    js 导出Excel2
    js 导出Excel
    CSS3动画
    没有欲望是一种什么样的感觉
    L9-DOM高级应用
    L8-DOM操作应用
    L7-DOM基础
    L6-js定时器的应用
  • 原文地址:https://www.cnblogs.com/weiyi-mgh/p/6691278.html
Copyright © 2011-2022 走看看