首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >操作系统的系统调用

操作系统的系统调用

作者头像
zy010101
发布2019-05-25 19:54:56
1K0
发布2019-05-25 19:54:56
举报
文章被收录于专栏:程序员程序员

首先,有一个概念叫做接口。抽象而言的接口是连接两个东西的中间物。接口的好处是屏蔽了连接起来的实际细节。我们只关心接口如何使用。

系统调用:操作系统的接口是连接应用软件与操作系统的中间桥梁。接口在程序设计中表现的形式就是:函数。操作系统提供的函数就被称为系统调用(system call)。这里有个标准POSIX(Portable Operating System Interface of UNIX,缩写为 POSIX ),它定义了操作系统应该为应用程序所提供的标准接口。Linux和Unix等系统遵守这个标准。

系统调用的实现:系统调用的存在给用户提供了接口,阻止了用户恶意访问操作系统的数据。系统调用也给用户访问内核提供了唯一的途径。计算机硬件的设计解决了这个问题的具体实现。它将内核程序和用户程序隔离。内核程序处于内核态,用户程序处于用户态。Intel的X86CPU使用CS寄存器的最低两位来表示:0是内核态,1和2是OS服务,3是用户态。我们把CS的最低的两位叫做CPL,它代表了当前程序的级别。DPL是调用目标段的代码级别。只有当

DPL>CPL时,才能访问。在系统初始化的时候,把操作系统相关的GDT表中的DPL设置为0,把用户态设置为3。

对于Intel X86而言,它进入内核的方式是中断指令int。因此进入内核的方式就是用户函数包含一段int指令的代码。这段代码将会导致操作系统中断,然后获取到想调用的程序的编号。OS根据这个编号来执行相应的代码。int这个指令将DPL更改为3,使得CPL == DPL。这样就进入了内核,然后将CPL设为0,等执行完后,在把CPL=3,返回用户态。系统调用实现的细节是这样的,它在代码中嵌入了一段汇编代码,这段代码中最重要的是int 0x80指令。这将会启动系统调用。当然我们还有系统调用号。 int指令在IDT表中查找系统调用的入口。这样就实现了系统调用。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年10月26日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档