Linux系统编程(一) 认识系统调用

定义:在计算机用户层与核心层之间有一个中间地带,称之为系统调用(system calls),它是用户层与核心层之间的接口。系统调用是一群预先定义好的模块,他们提供一条管道让应用程序或一般用户能由此得到核心程序的服务。例如外围设备的使用,程序的执行,文件的传输等。换言之,系统调用担任一个保护人兼中介者的角色。一方面在核心程序与用户之间传递信息,另一方面也可以防止因用户的程序不慎而破坏内核程序内的一些子程序。

注:系统调用可以大致分为以下几类

  • 1.进程的管理
  • 2.存储器的管理
  • 3.文件系统的管理
  • 4.输出与输入设备的管理
  • 5.进程间通讯(IPC)
  • 6.系统信息的获取

一个进程调用系统调用的方法有两种:1.通过调用调用了系统调用的库函数,间接调用系统调用。2.直接调用系统调用。

===========================================================================

有关进程的一些引理:

  • 1.进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。
  • 2.进程表:在核心程序内有一个进程表,每个执行中的进程在这个表中都设有一个栏,这个栏用来记载各进程的执行状态。
  • 3.用户区:每个进程在启动后,核心程序都会为这个新进程分配一块储存空间。该空间用来记录有关此进程的信息,这些信息在进程执行时,可供核心程序使用。这些信息包括:  1.这个进程打开了哪些文件  2.根目录,当前目录   3.本子系统调用有几个参数   4.进程的堆栈段、数据段、程序段的大小    5.一个指向进程表的指针:通过这个指针,核心程序可以找到进程表内关于该进程的数据,这些数据与进程调度的优先顺序有关。    6.进程的核心堆栈的内容。
  • 3.用户空间:用户所启动的进程在存储器中执行的位置。在用户空间与用户空间之间,Linux设有保护机制,避免进程间相互干扰。唯有核心程序所启动的进程才有存取其他进程的用户空间的权利。一个进程在此存储器空间执行时,该进程被称为在用户模式下作业。
  • 4.系统核心空间:含有一切系统核心代码的存储器空间,一般进程必须经过系统调用才能获得这些核心代码的服务。当一个进程在执行本身代码时,它被称为用户进程。一旦它调用了系统调用,它就变成核心进程,具有执行核心代码的权利。此时称之为在核心程序模式下作业。
  • 用户空间与系统核心空间是两块截然不同的空间。在执行系统调用时,操作系统必须把数据完整安全地在两个地址间传送。因此在从用户模式过度到系统核心模式时,核心程序必须将进程在用户模式下的作业状态存储起来,等到系统调用执行结束,执行状态由系统核心模式回到用户模式时,再继续刚才未完成的作业。

===========================================================================


如图,在系统调用执行是,一个特殊的叫做"trap"的指令会执行,它将进程由用户模式切换至系统核心模式。(由上边的引理,每一次调用系统调用,都会进行 用户模式作业状态存储 用户空间到系统核心空间的切换 进程数据的传输 系统核心模式到用户模式的切换 用户模式作业状态的恢复 等等一系列操作。所以系统调用越多,进程的开销会越大,在有些情况下将会严重影响效率。所以对于系统调用的次数有时可以作为分析代码效率的参考。

猜你喜欢

转载自blog.csdn.net/qq_15689151/article/details/79825067