当前位置:  技术问答>linux和unix

系统调用的实现库在哪?

    来源: 互联网  发布时间:2016-05-22

    本文导语:  一般库函数的实现都放在/usr/lib中,系统调用的实现放在哪呢? 当我们在调用一个函数时,OS是如何确定我们调用的是库函数还是系统调用呢? OS是如何把系统调用代码链接到我们的程序中,是静态还是动态链接? 所...

一般库函数的实现都放在/usr/lib中,系统调用的实现放在哪呢?
当我们在调用一个函数时,OS是如何确定我们调用的是库函数还是系统调用呢?
OS是如何把系统调用代码链接到我们的程序中,是静态还是动态链接?
所谓的系统调用是运行在内核态是什么意思,什么是内核态?

|

[root][~/asm]# cat test.s
.section        .data
str:
        .asciz  "Hello, world!n"
.section        .text
.globl  _start
_start:
        pushl   $str
        call    printf    " 这里是调用库函数printf输出字符串

        movl    $1, %eax  " 这里是系统调用,$1代表exit()这个系统调用
        movl    $0, %ebx  " 这里是设置exit()系统调用的返回值,正常返回,值设为0
        int     $0x80

[root][~/asm]# as -o test.o test.s  // 编译
[root][~/asm]# ld -dynamic-linker /lib/ld-linux.so.2 -lc -o test test.o //链接,需要连接C库,有printf
[root][~/asm]# ./test  // 运行程序
Hello, world!
[root][~/asm]# echo $?  // 查看程序的返回值,确实为0
0

|


呵呵,和windows 不一样 windows系统调用 以动态链接库的方式提供

Linux是 用户态 trap 进内核态 然后由内核查看 寄存器的值(比如 %eax) 得知是调用哪个系统调用函数。

你可以写一个简单小代码 然后调用 execve (这个linux 系统调用,其他execpl等等都是被C库包装过了),然后编译 objdump -d a.out 看看汇编代码

|
系统调用是操作系统提供给用户的编程接口,分布在内核
的实现中,并不是在一两个文件中实现的
系统调用名一般和库函数名都是不同的,但是也可以根据
#include判断
Linux OS 的运行状态一般分内核态和用户态
具体的google之

|

系统调用和调用函数的机制完全不同,不是链接的概念

|

基本就是内核提供的、功能十分强大的一系列的函数。这些系统调用是在内核中实现的,再通过一定的方式把系统调用给用户,

|
这个问题,建议你看看 《linux内核设计与实现》
有很详细的介绍。

|
当我们在调用一个函数时,OS是如何确定我们调用的是库函数还是系统调用呢? 
估计不看内核肯定理解不到.

    
 
 

您可能感兴趣的文章:

  • LINUX下系统调用是不能中断的,要怎么改造成可以中断系统调用?
  • 请问linux中的系统调用号是如何跟系统调用表对应起来的
  • Linux添加系统调用时如何调用C语言库函数
  • 问:系统调用的原理,一个C函数的系统调用是怎样进入到系统的?
  • 截获系统调用的模块中,如何获得发生系统调用eip
  • linux中为什么系统调用比普通函数调用更费时间?
  • 如何在LINUX下用一个普通文件调用一个自己编写的调用系统的文件
  • MINIX3 系统如何添加系统调用
  • 关于minix文件系统中dup的系统调用问题
  • 在LINUX中使用C调用系统命令,怎么取得系统命令的输出?
  • 在linux kernel 里添加了系统调用,如何在用户程序中调用添加的系统调用呢?急
  • 系统调用对应的内核函数在什么地方
  • 增加系统调用
  • NOSQL iis7站长之家
  • 望指点:系统调用与函数库关系
  • 如何用系统调用实现每秒钟显示一次系统时钟,可以用getitimer,setitimer,alarm?
  • 我自己写了一个一个程序,文件名叫test。。怎么能够像调用系统命令那样子去调用我这个命令呢。在任何地方输入test就能执行这个程序。
  • settimeofday系统调用只是修改了系统时间?!没写进硬件?重启后时间还是1970怎么办??感谢路过的大神指点
  • 关于Linux系统调用的问题!
  • C库函数和linux系统调用区别
  • linux内存文件系统ramfs实现原理
  • 在linux系统上,如何用C++实现获取和设置系统时间?
  • Linux内存文件系统(ramdisk)的三种实现方式
  • 问一个问题。请问如何在文件系统管理并使用设备,也就是当一个设备装载,下载时。文件系统是如何实现的
  • 我想在xp下安装linux系统,实现双系统,高手指点一下
  • 在xp下装ubuntu系统实现双系统网络连接问题
  • 在window 的操作系统里,应该有个软件可以实现,安装一个虚拟的linux操作系统
  • 有关《一个操作系统的实现》中文件系统的问题
  • 如何通过C++编程实现获取Linux系统下的一些系统信息?
  • 利用文件系统过滤驱动实现 类似还原卡功能 的原理是什么?
  • 如何实现只有指定的计算机可以登录系统?(系统为JSP+EJB,使用者跨多个网段)
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • mount命令(linux操作系统)挂载卸载文件系统(cifs,光驱,nfs等)方法介绍
  • 问一个系统配置的问题:win2k系统能不能于SCO UNIX系统共存?
  • win7/Windows7系统下载地址搜集整理
  • unix下用java.util.Date取系统时间比直接在系统下用date命令查看系统时间早整整一个小时
  • Ubuntu查看系统信息命令介绍
  • windows 系统是否是多用户操作系统,如何理解“多用户操作系统”的“多用户”?
  • python下用os.execl执行centos下的系统时间同步命令ntpdate
  • 我现在想做一个权限管理系统,想让权限系统的利用性更强,我应该怎样设计权限系统呢.
  • 怎样重装win7系统?win7重装系统步骤详细图文介绍
  • 谁知道哪里有用java开发的管理信息系统软件(如:图书馆管理系统,人事部管理系统)的代码?
  • windows server2008上PowerBuilder程序系统错误解决方法
  • 原来已安装好ubuntu,因系统崩溃,重装WINXP系统,如何再次登录ubuntu系统?
  • Ubuntu系统安装及升级命令
  • Linux(Oracle系统在上面)系统无缘无故死机 , 可能是由于应用程序引起 , 可是由于重新启动查不到相关信息 , 不知道在哪里有记录系统CPU Lo
  • 安装运行微软win7/Windows7系统要求及官方下载地址
  • UNIX系统下,进程写文件,写了很大量的文件,但是进程被KILL -9杀掉,系统可以保证写缓冲上的文件写到系统吗?
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • LINUX系统怎么记录飞鱼星VE982G系统日志
  • FastDFS分布式文件系统介绍和FastDFS的安装配置过程
  • pipe是什么样的文件系统?是独立的文件系统吗?
  • Linux/Centos/Ubuntu清除系统缓存释放内存命令介绍
  • 我的系统硬盘有一个block坏了,系统不能正常启动,请问如何能启动设备?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3