操作系统-系统调用

应用程序调用printf(),会触发系统调用write()

1、概念

        操作系统服务的编程接口,通常由高级语言编写(C/C++),程序访问通常是通过高层次的API接口而不是直接进行系统调用。

2、三种最常用的应用程序编程接口(API)

1、win32 API(windows)

2、POSIX API用于POSIX-base-system(包括UNIX、LINUX,MacOS X的所有版本)

3、Java API 用于JAVA虚拟机(JVM)

3、系统调用的实现

3.1每个系统调用对应一个系统调用号

        系统调用接口根据系统调用号来维护表的索引

3.2系统调用接口调用内核态中的系统调用功能实现,并返回系统调用的状态和结果

3.3用户不需要知道系统调用的实现

        需要设置调用参数和获取返回结果

        操作系统接口的细节大部分都隐藏在编程接口后

        通过运行程序支持的库来管理

4、函数调用和系统调用的区别

        系统调用:INT和IRET指令用于系统调用,系统调用时,用户态和内核态使用不同的堆栈所以存在堆栈切换和特权级的转换。(内核态才有特权)

        函数调用:CALL和RET用于常规调用,常规调用时没有堆栈切换。

5、中断、异常和系统调用的开销

        中断、异常和系统调用的开销都大于函数调用,主要牵涉用户态和内核态的切换,开销包括:引导机制、建立内核堆栈、验证参数、内核态映射到用户态的地址空间(更新页面映射权限)、内核态独立地址空间(TLB)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值