今天对系统调用和库函数调用进行了一次总结!在这里把心得写出来,如果有什么错误希望大家能指出
我们假设UNIX系统 库函数有C编译器提供 , 而你有用汇编编写C库函数的能力!
首先要知道宏观上知道系统调用和库函数的区别:系统调用由操作系统提供,我门假设用汇编编写的
而库函数是编译器提供
而我们知道系统调用是会通过一种陷阱的机制陷入内核而执行相应的处理程序
为什么要陷入内核哪,因为系统分为内核态和用户态,比如我们对某I/O进行相应的操作,假设利用汇编语言,只有在内核态时才能使用这些存取I/O指令.
这样的话我们就知道当进行I/O存取时(控制硬件,或对内核数据访问,系统状态的访问,进程的管理一类)都要陷入内核,才能使用有关指令
而象我门所说的库函数或API用户编程接口并不是系统调用,他们只是当涉及到需要陷入内核才能完成的功能才调用相应功能的系统调用,例如PRINTF()函数就调用了系统调用的WEITE().进入内核而完成功能.
象一些ABS()一类的函数(对用户数据操作)就无须陷入内核,而在库函数中也就无须进行系统调用.因为他们是对用户空间的数据(程序的正文,数据区和堆栈区)进行访问.
当你自己用汇编进行库函数的编写时同样要进行BIOS中断,来实现一些内核完成的任务,BIOS中断就已经是进入内核了.如果你自己直接对I/O端口地址进行存取,比如直接写屏,前提你要开CPU中断 CLD/STD 这也已经进入内核了