《liunx操作系统》课件21系统调用与库函数_第1页
《liunx操作系统》课件21系统调用与库函数_第2页
《liunx操作系统》课件21系统调用与库函数_第3页
《liunx操作系统》课件21系统调用与库函数_第4页
《liunx操作系统》课件21系统调用与库函数_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、系统调用与库函数操作系统结构用户进程及系统进程都在内核上运行用户态与内核态为了更好地保护内核空间,将程序的运行空间分为用户空间和内核空间,逻辑上是相互分离的用户进程通常情况下不允许访问内核数据,也无法使用内核函数,它们只能在用户空间操作用户数据,调用用户空间的函数用户空间的进程需要获得系统服务,就必须利用操作系统提供给用户的特殊接口,即系统调用函数系统调用系统调用与库函数Linux操作系统提供良好定义的有限数目的接口程序,使用户程序通过接口得到内核提供的服务,这些接口程序即即系统调用为了方便用户编程使用,减低因执行系统调用带来的运行模式切换所造成的开销,Linux提供运行在用户空间的应用程序接

2、口(API)库函数系统调用与库函数API库函数和系统调用并不只是一对一的关系,可以是多对一,也可以是一对多只能是API向下调用,而系统调用不能调用API系统调用与库函数库函数为程序开发和执行提供方便环境,本身并不属于操作系统内核部分系统调用一般位于操作系统核心的最高层,通过调用内核函数实现包括进程控制、文件系统控制、内存管理、socket管理、进程通信、系统控制等功能虚拟文件系统系统调用函数系统调用函数以C函数形式提供给用户有类型、名称、参数,并且标明相应的文件包含read系统调用可以打开一个指定文件 #include #include #include #include size_t rea

3、d(int fd, const void * buf, size_t count);系统调用与库函数函数库调用系统调用在所有的ANSI C编译器版本中,C库函数是相同的各个操作系统的系统调用是不同的调用函数库中的一段程序(或函数)调用系统内核的服务与用户程序相联系是操作系统的一个入口点在用户地址空间执行在内核地址空间执行它的运行时间属于“用户时间”它的运行时间属于“系统”时间属于过程调用,调用开销较小需要在用户空间和内核上下文环境间切换,开销较大库文件程序要实现他们的功能,需要很多函数,包括自己编写和调用别人已经写好的函数linux把人们预先编译好的按照可重用的原则编写的函数集合起来,就是函数

4、库在任何编程环境中,库文件都是一些预先编译好的函数集合,函数以二进制代码形式存储在库文件中库文件为了便于编程,对于部分经常使用的函数,相应的开发语言都提供了对应的库文件支持,用户要使用这些函数,只需要包含这些库文件即可程序员在使用库文件时,只需要包含所需要函数所在的头文件,而不必关心该函数的具体实现函数库文件包含.a的静态库和.so的共享库头文件不同的系统调用函数需要不同头文件头文件保存在/usr/include内系统调用函数依赖于所运行的linux版本,一般放在/usr/include/sys或/usr/include/linux中库文件在编译时将库中相应函数的二进制映像代码直接拷贝到当前编

5、译的程序中,当前程序在运行时独立运行,即静态库,如 lib*.a在编译时只引用库中相应函数的二进制映像代码的入口位置(不直接拷贝),该程序在运行时从共享库文件中读出该函数代码(首先将共享库加载到内存中),从而间接引用,这种库即共享库,以 lib*.so.x.x 为格式命名静态库与共享库静态库(*.a)指令全都包含在最终生成的可执行文件中当同时运行的许多程序都使用同一个静态库时,就会在内存中有同一个函数的多份拷贝共享库(*.so)不必被包含在最终可执行文件中,文件执行时可以动态的引用和卸载共享库文件程序使用共享库的时候,有必要共享库才被加载到内存中函数库与头文件/lib:系统必备共享库/usr/

6、lib:标准共享库和静态库/usr/local/lib: 本地函数库/usr/include: 系统头文件/usr/local/include: 本地头文件共享库ldd: 可查看某个可执行文件所使用的共享库/etc/ld.so.conf: 包含共享库搜索位置的配置文件,记录了编译时使用的动态库的路径ldconfig: 共享库管理工具, /etc/ld.so.conf列出的路径下的库文件 缓存到/etc/ld.so.cache 以供使用,一般在更新了共享库之后要运行该命令ldd命令确定某一特定可执行程序是否引用共享库库文件编译器只会使用/lib和/usr/lib下的库文件通过源码包进行安装时,如

7、果不指定-prefix会将库安装在/usr/local目录下(可执行文件在bin下,头文件在include下,库文件在lib下)若未在文件/etc/ld.so.conf中添加/usr/local/lib这个目录,即使安装了源码包,但是使用时仍然找不到相关的.so库也会报错,系统找不到此文件glibcgnu发布的libc库,即c运行库linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现glibc版本查看libc版本安装clustal omega解压缩及安装tar -zxvf clustal-omega-1.2.1.tar.gz./configureargtable2wget /argtable/argtable2-13.tar.gz 链接库错误链接库默认位置为/lib和/usr/lib在/lib里建立库链接文件,或修改/etc

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论