网站搜索:
第3节 System Call
文章出处:与非网
更新于2008-05-15 11:00:39

System Call(系统调用)
用户程序用以请求内核提供的服务的特殊函数
除非一个汇编程序仅仅进行数学运算,否则其必须进行输入输出及退出等操作,而要进行这些操作就需要调用操作系统的服务。
在UNIX系统下有两种方式实现对系统调用的使用:通过经过封装的C库(libc)或者直接调用
其功能和性能很大程度上反映了操作系统的功能和性能
常用的系统调用
分为I/O处理、进程、时间、内存等
1、文件操作
2、进程控制
3、信号处理
4、高级I/O
5、IPC
6、网络通信
  …

除特殊说明,所有函数返回负值表示失败。
进程相关的系统调用函数
fork()
clone(), pthead_create()
exit()
wait()
pipe()
signal()
kill()
exec()
Case:80386
两种运行模式:
在实模式下,它相当于一个快速的8086 CPU。16位地址总线和16位数据总线。由于每个地址分两次发送,实际的寻址能力为220=1M。
在保护模式下,80386才能发挥出真正的性能。32位地址总线和32位数据总线,寻址能力为232=4G。在机器启动时,CPU处于实模式,必须通过模式切换才能进入保护模式。有兴趣的同学可参考Linux内核的引导和启动部分源代码。
Linux,windows等现代操作系统都是运行在保护模式下。
四种特权级别
在实模式下,没有级别之分。在保护模式下,CPU有4个特权级别。特权级0,特权级1,特权级2,特权级3。Linux只使用了0和3,分别称为内核态和用户态。在内核态下,CPU可执行任何指令,在用户态下CPU只能执行非特权指令。
当CPU处于内核态,可以随意进入用户态;而当CPU处于用户态,只能通过中断的方式进入内核态。一般程序一开始都是运行于用户态,当程序需要使用系统资源时,就必须通过调用软中断进入内核态,这个软中断就称为系统调用(system call)或者说调用系统函数,在Linux下为int 80h。
由于每一次的中断调用都涉及很多的寄存器操作,为了方便,一般操作系统将系统调用封装成一组C函数,这些函数所作的操作就是设置寄存器值,调中断,并把结果返回。
Linux下文件/usr/include/sys/syscall.h列出了所用的系统调用函数,而实际上是定义在/usr/include/asm/unistd.h中。

 
sys_call_table

 

<<上一节            下一节>>



关于OpenHW | OpenHW使用说明 | FAQ | 相关法律 | 版权声明 | 网站地图
联系邮件:xiaoquan@eefocus.com  联系电话: 010-58859035-8012
Powered by eefocus.com