linux体系调用第一篇

打印 上一主题 下一主题

主题 916|帖子 916|积分 2748

体系调用

体系调用,顾名思义,说的是操作体系提供给用户程序调用的一组“特别”接口。用户程序可以通过这组“特别”接口来得到操作体系内核提供的服务,比如用户可以通过文件体系相关的调用请求体系打开文件、关闭文件或读写文件,可以通过时钟相关的体系调用得到体系时间或设置定时器等。
从逻辑上来说,体系调用可被看成是一个内核与用户空间程序交互的接口——它好比一个中间人,把用户进程的请求传达给内核,待内核把请求处理完毕后再将处理效果送回给用户空间。

体系服务之所以必要通过体系调用来提供给用户空间的根本原因是为了对体系进行“保护”,因为我们知道 Linux 的运行空间分为内核空间与用户空间,它们各自运行在差异的级别中,逻辑上相互隔离。所以用户进程在通常情况下不允许访问内核数据,也无法使用内核函数,它们只能在用户空间操作用户数据,调用用户空间函数。
实现

体系调用是属于操作体系内核的一部分的,必须以某种方式提供给进程让它们去调用。CPU 可以在差异的特权级别下运行,而相应的操作体系也有差异的运行级别,用户态和内核态。运行在内核态的进程可以毫无限定的访问各种资源,而在用户态下的用户进程的各种操作都有着限定,比如不能随意的访问内存、不能开闭中断以及切换运行的特权级别。显然,属于内核的体系调用一定是运行在内核态下,但是怎样切换到内核态呢?
答案是软件中断。软件中断和我们常说的中断(硬件中断)差异之处在于,它是通过软件指令触发而并非外设引发的中断,也就是说,又是编程人员开发出的一种非常(该非常为正常的非常)。操作系同一般是通过软件中断从用户态切换到内核态。
体系调用(system call)和库函数(library function)是编程中常用的两种调用方式,它们之间有以下几点区别:

  • 触发方式

    • 体系调用是由用户程序通过特别的指令(比方软中断指令或者特定的处理器指令)触发的,以请求操作体系提供服务或实行特定操作。
    • 库函数是由用户程序直接调用的函数,这些函数通常封装在库文件中,用户程序通过链接库文件来调用这些函数。

  • 特权级别

    • 体系调用实行时会导致用户态和内核态之间的切换,因为体系调用必要访问操作体系的内核空间,具有较高的权限级别。
    • 库函数的实行在用户态完成,不必要切换到内核态,因此无需特别的权限。

  • 功能

    • 体系调用通常提供了与操作体系相关的底层功能,比方文件操作、进程管理、网络通信等。
    • 库函数提供了各种常用的功能,比方字符串处理、数学运算、内存管理等。

  • 性能开销

    • 由于体系调用涉及用户态和内核态之间的切换,因此通常会伴随着较大的性能开销。
    • 库函数的调用通常只涉及用户态,因此性能开销较小。

  • 跨平台性

    • 体系调用的接口是由操作体系界说的,因此在差异的操作体系上大概存在差异,必要编写特定平台的代码。
    • 库函数通常是标准化的接口,在差异的编程语言宁静台上都可以使用,具有较好的跨平台性。


C库IO函数工作流程


后续提供具体代码
虚拟地点空间

每个进程都会分配虚拟地点空间,在32位机器上,该地点空间为4G:


代码里体现的都是用户区的数据段。

在进程里平时所说的指针变量,保存的就是虚拟地点。当应用程序使用虚拟地点访问内存时,处理器(CPU)会将其转化成物理地点。
这样做的利益在于:

  • 进程隔离,更好的保护体系安全运行
  • 屏蔽物理差异带来的麻烦,方便操作体系和编译器安排进程地点
具体对于虚拟地点空间的理解我看的这一篇

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

慢吞云雾缓吐愁

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表