系统调用与过程调用

 

程序中执行系统调用或过程(函数)调用,虽然都是对某种功能或服务的需求,

但两者从调用形式到具体实现都有很大区别。

 

 

(1)调用形式不同。过程(函数)使用一般调用指令,其转向地址是固定不变的,

包含在跳转语句中;但系统调用中不包含处理程序入口,而仅仅提供功能号,按功能号调用。

 

--->过程函数在编译成程序后,代码的逻辑地址是固定不变的。系统调用在程序中并不会产生函数代码,所以也没有入口点一说。

 

(2)被调用代码的位置不同。过程(函数)调用是一种静态调用,调用者和被调用

代码在同一程序内,经过连接编辑后作为目标代码的一部份。当过程(函数)升级或

修改时,必须重新编译连结。而系统调用是一种动态调用,系统调用的处理代码在调

用程序之外(在操作系统中),这样一来,系统调用处理代码升级或修改时,与调用

程序无关。而且,调用程序的长度也大大缩短,减少了调用程序占用的存储空间。

 

 

--->这里需要注意程序与进程的关联与区别。进程加载程序的代码以及数据。无论如何,运行中的程序在调用的时候无论函数或者系统调用,都是需要实体的代码,这些代码,进程都会加载。不同就在于代码的“位置”,或者我们可以理解为位置。进程的地址空间中包含用户地址空间与核心地址空间。用户态的进程只能执行用户的进程地址空间中的代码,而系统调用的代码是存在于核心地址空间中的,所以系统调用首先要转换到核心态。

核心地址空间里的东西我们可以理解所有进程都共享的,属操作系统控制的范畴。

 

(3)提供方式不同。过程(函数)往往由编译系统提供,不同编译系统提供的过程

(函数)可以不同;系统调用由操作系统提供,一旦操作系统设计好,系统调用的功

能、种类与数量便固定不变了。

 

 

(4)调用的实现不同。程序使用一般机器指令(跳转指令)来调用过程(函数),

是在用户态运行的;程序执行系统调用,是通过中断机构来实现,需要从用户态转变

到核心态,在管理状态执行,因此,安全性好。

 

 

 

主体摘自操作系统教程。附加个人理解。

  • 21
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值