使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
2016-03-16 17:29
501 查看
使用库函数API在屏幕上显示进程的ID
使用C语言内嵌汇编代码在屏幕上显示进程ID
API:第一层是指Libc中定义的API,这些API封装了系统调用,使用int 0x80触发一个系统调用中断;当然,并非所有的API都使用了系统调用,如完成数学加减运算的API就没有使用系统调用;也有可能某个API使用了多个系统调用;这一层存在的价值就是为应用程序员提供易于使用的API来调用系统调用;
system_call:运行于内核态。system_call是所有系统调用在内核的入口点,在其中的开始处保护用户态程序执行上下文,结束处恢复用户态程序执行上下文,在中间根据传入的系统调用号对应的中断服务程序;
sys_xyz 系统调用封装例程:执行具体的系统调用操作,完成用户的系统调用请求;每个系统调用都对应一个封装例程;
实验总结
对于本次实验实在有太多不懂之出代码虽是网上寻找不过还是让我了解许多。系统调用其实就是操作系统提供的服务。我们平时编写的程序,如果仅仅是数值计算,那么所有的过程都是在用户态完成的,但是我们想将变量打印在屏幕上,就必须调用printf,而printf这个函数内部就使用了write这个系统调用。操作系统之所以以system
call的方式提供服务,是因为如果程序员能够任意操作OS所有的资源,那么将无比危险,所以OS设计出了内核态和用户态。我们平时编程都是在用户态下,如果我们想要调用系统资源,那么就必须采用系统调用,陷入内核态,才能达到目的。
使用C语言内嵌汇编代码在屏幕上显示进程ID
API:第一层是指Libc中定义的API,这些API封装了系统调用,使用int 0x80触发一个系统调用中断;当然,并非所有的API都使用了系统调用,如完成数学加减运算的API就没有使用系统调用;也有可能某个API使用了多个系统调用;这一层存在的价值就是为应用程序员提供易于使用的API来调用系统调用;
system_call:运行于内核态。system_call是所有系统调用在内核的入口点,在其中的开始处保护用户态程序执行上下文,结束处恢复用户态程序执行上下文,在中间根据传入的系统调用号对应的中断服务程序;
sys_xyz 系统调用封装例程:执行具体的系统调用操作,完成用户的系统调用请求;每个系统调用都对应一个封装例程;
实验总结
对于本次实验实在有太多不懂之出代码虽是网上寻找不过还是让我了解许多。系统调用其实就是操作系统提供的服务。我们平时编写的程序,如果仅仅是数值计算,那么所有的过程都是在用户态完成的,但是我们想将变量打印在屏幕上,就必须调用printf,而printf这个函数内部就使用了write这个系统调用。操作系统之所以以system
call的方式提供服务,是因为如果程序员能够任意操作OS所有的资源,那么将无比危险,所以OS设计出了内核态和用户态。我们平时编程都是在用户态下,如果我们想要调用系统资源,那么就必须采用系统调用,陷入内核态,才能达到目的。
相关文章推荐
- [Java学习] 将PDF格式文件转成二进制并生成Base64编码,将Base64编码转成PDF文件
- C语言求一组分数数列之和
- php 去除数组中的某个元素
- BIO, NIO和 AIO的代码例子
- Spring MVC基础
- c#中的结构
- java.lang.UnsatisfiedLinkError
- C#时间戳转换
- 闭包分析:lua function,oc 代码块可以产生闭包.c++lambda不能产生闭包
- SSH2之搭建struts2(一)
- C# 添加FormClosing事件
- [Java语言] [Leetcode] Find Minimum in Rotated Sorted Array 找旋转有序数组的最小值
- Java中内部类表现形式
- ORTP库入门
- Java基础自学笔记001
- 含所有运算符重载的讲解(附实例)
- github 同步 fork
- C语言第零篇:C语言学习
- JDBC 基础核心代码
- 猜生日_蓝桥杯题目_最简版