操作系统:用户编程接口(概念)

原创 2016年06月01日 14:21:58

对于计算机系统而言,操作系统充当着基石的作用,它是连接计算机底层硬件与上层应用软件的桥梁,控制其他程序的运行,并且管理系统相关资源,同时提供配套的系统软件支持。对于专业的程序员而言,掌握一定的操作系统知识比不可少,因为不管面对的是底层嵌入式开发,还是上层的云计算开发,都需要使用到一定的操作系统相关知识。


库函数与系统调用有什么不同

库函数调用是语言或应用程序额一部分,它是高层的,完全运行在用户空间,为程序员提供调用真正的在幕后完成实际事务的系统调用接口,属于系统的一部分。函数库调用是语言或应用程序的一部分,而系统调用是操作系统的一部分。
这里写图片描述

库函数调用通常比行内展开的代码慢,因为它需要付出函数调用的开销。但系统调用比库函数调用还要慢很多,因为它需要把上下文环境切换到内核模式。。

静态链接与动态链接有什么区别

静态链接是指把调用的函数或者过程直接链接到可执行文件中,称为可执行文件的一部分。换句话说,函数和过程的代码就在程序的exe文件中,该文件包含了运行时所需的全部代码。静态链接的缺点是当多个程序都调用相同函数时,内存中就会存在这个函数的多个拷贝,这样就浪费了内存资源。

动态链接是相对于静态链接而言的,动态链接所调用的函数代码并没有被拷贝到应用程序的可执行文件中去,而是仅仅在其中加入了所调用函数的描述信息(往往是一些重定位信息)。仅当应用程序被装入内存开始运行时,在操作系统的管理下,才在应用程序与响应的动态链接库(dynamic link library,dll)之间建立链接关系。当要执行所调用dll中的函数时,根据链接产生的重定位信息,操作系统才转去执行dll中相应的函数代码。

静态链接的执行程序能够在其他同类操作系统的机器上直接运行。例如,一个exe文件是在windows2000系统上静态链接的,那么将该文件直接拷贝到另一台windows2000的机器上,是可以运行额。而动态链接的执行程序则不可以,除非把该exe文件所需的dll文件都一并拷贝过去,或者对方机器上也有所需的相同版本的dll文件,否则是不能保证正常运行的。。。

静态链接库与动态链接库有什么区别

静态链接库就是使用的.lib文件,库中的代码最后需要链接到可执行文件中去,所以静态链接的可执行文件一般比较大一些。

动态链接库是一个包含可由多个程序同时使用的代码和数据的库,它包含函数的数据的模块集合。程序文件(如.exe文件或.dll文件)在运行时加载这些木块(也即所需的模块映射到调用进程的地址空间)。

静态链接库和动态链接库的相同点是它们都实现了代码的共享。不同点是静态链接库lib中的代码被包含在调用的exe文件中,该lib中不能再包含其他动态链接库或者静态链接库了。而动态链接库dll可以被调用的exe动态地“引用”和“卸载”,该dll中可以包含其他动态链接库或者静态链接库。

用户态和核心态有什么区别

核心态与用户态是操作系统的两种运行级别,它用于区分不同程序的不同权利。核心态就是拥有资源多的状态,或者说访问资源多的状态,也称之为特权态。相对来说,用户态就是非特权态,在此中状态下访问的资源将受到限制。如果一个程序运行在特权态,则该程序就可以访问计算机的任何资源,即它的资源访问权限不受限制。如果一个程序运行在用户态,则其资源需求将受到各种限制。例如,如果要访问操作系统的内核数据结构,如进程表,则需要在特权态下才能办到。如果要访问用户程序里的数据,则在用户态下就可以了。。

用户栈和内核栈有什么区别

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

当进程因为中断或者系统调用而陷入内核态时,进程所使用的堆栈也要从用户栈转到内核栈。进程陷入内核态后,先把用户态堆栈的地址保存在内核栈中,然后设置堆栈指针寄存器的内容为内核栈的地址,这样就完成了用户栈向内核栈的转换;当进程从内核态恢复到用户态之后时,在内核态之后的最后将保存在内核栈里面的用户栈额地址恢复到堆栈指针寄存器即可。这样就实现了内核栈和用户栈的互转。

那么,知道从内核转到用户态时用户栈的地址是陷入内核的时候保存在内核栈里面的,但是在陷入内核的时候,如何知道内核栈的地址?关键在进程从用户态转到内核态的时候,进程的内核栈总是空的。这是因为当进程在用户态运行时,使用的是用户栈,当进程陷入到内核态时,内核栈保存进程在内核态运行的相关信息,但是一旦进程返回到用户态后,内核栈中保存的信息无效,会全部恢复,因此每次进程从用户态陷入内核的时候得到的内核栈都是空的,所以在进程陷入内核的时候,直接把内核栈的栈顶地址给堆栈指针寄存器就可以了。

版权声明:本文为博主原创文章,未经博主允许不得转载。

操作系统概念(第十章) 文件系统接口

文件概念文件是记录在外存上得相关信息的具有名称的集合。其具有连续的逻辑地址空间通常,文件表示数据和程序。数据文件可以包括,数字、字符、字符串或二进制。文件可以是自由形式,如文本文件,也可以具有严格的格...
  • u013007900
  • u013007900
  • 2015年12月23日 20:20
  • 2017

操作系统内核Hack:(二)底层编程基础

操作系统内核Hack:(二)底层编程基础在《操作系统内核Hack:(一)实验环境搭建》中,我们看到了一个迷你操作系统引导程序。尽管只有不到二十行,然而要完全看懂还是需要不少底层软硬件知识的。本文的目的...
  • dc_726
  • dc_726
  • 2015年10月09日 21:22
  • 5110

操作系统程序设计-(-编程描述页面置换算法——先进先出算法 )

  • 2010年06月02日 16:30
  • 85KB
  • 下载

从前后台编程向操作系统编程思维转变

题记:适用于那些仅有一种编程经验的人员    不得不说一点,经常做前后台编程的人,很不容易向操作系统编程转变,觉得操作系统很玄乎,自己无从下手,少了控制感;而经常做操作系统编程的人,觉得为什么要前...
  • wuxianglonghaohao
  • wuxianglonghaohao
  • 2014年01月14日 11:11
  • 1031

操作系统原理·技术与编程.蒋静 PDF

  • 2016年04月13日 08:07
  • 88.36MB
  • 下载

系统调用及用户编程接口(API)

系统调用:用户通过操作系统提供的接口(API)获得内核提供的一些服务 程序的运行空间逻辑上是分离的,分为内核空间和用户空间。 用户进程通常情况下无法访问内核空间。 所有的进程会在内核中有一个文件记录表...
  • duhengqi
  • duhengqi
  • 2017年03月08日 21:41
  • 659

计算机操作系统的用户接口

计算机操作系统的用户接□       所谓操作系统的用户接口,就是操作系统提供给用户,使用户可通过它们调用系统服务的手段。   通常,操作系统是通过叫做应用编程接口API和操作命令两种方式...
  • maochengtao
  • maochengtao
  • 2013年05月18日 10:58
  • 1641

4.系统接口——操作系统接口

Interface:electrical circuit linking one device with another and enabling data coded in one format t...
  • jieqiong1
  • jieqiong1
  • 2017年01月12日 14:21
  • 418

操作系统接口shell

百度上关于shell的回答,觉得讲的不错,特此收藏! 操作系统与外部最主要的接口就叫做shell。shell是操作系统最外面的一层。shell管理你与操作系统之间的交互:等待你输入,向操作系...
  • quyuedage
  • quyuedage
  • 2016年07月06日 14:16
  • 502

系统调用及用户编程接口(API)

系统调用:用户通过操作系统提供的接口(API)获得内核提供的一些服务 程序的运行空间逻辑上是分离的,分为内核空间和用户空间。 用户进程通常情况下无法访问内核空间。 所有的进程会在内核中有一个文件记录表...
  • duhengqi
  • duhengqi
  • 2017年03月08日 21:41
  • 659
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:操作系统:用户编程接口(概念)
举报原因:
原因补充:

(最多只允许输入30个字)