深入理解Solaris X64系统调用】的更多相关文章

理解系统调用的关键在于洞悉系统调用号是联系用户模式与内核模式的纽带.而在Solaris x64平台上,系统调用号被保存在寄存器RAX中,从用户模式传递到内核模式.一旦进入内核模式,内核的sys_syscall入口程序就根据保存在RAX中的系统调用号,从内核维护的系统调用表(sysent)中查询出对应的系统调用处理程序,从而进行系统调用.系统调用最多支持6个参数,参数被顺序保存在寄存器RDI, RSI, RDX, RCX, R8, R9中完成传递.另外,从用户模式陷入内核模式,通过汇编指令sysc…
随着64位操作系统的普及,都开始大力进军x64,X64下的调试机制也发生了改变,与x86相比,添加了许多自己的新特性,之前学习了Windows x64的调试机制,这里本着“拿来主义”的原则与大家分享. 本文属于译文,英文原文链接:http://www.codemachine.com/article_x64deepdive.html 翻译原文地址:深入Windows X64 调试 在正式开始这篇译文之前,译者先定义下面两个关于栈帧的翻译: frame pointer:栈帧寄存器.栈帧指针,在X86…
转自:http://os.51cto.com/art/200512/13510.htm 现在,您或许正在查看设备驱动程序,并感到奇怪:“函数 foo_read() 是如何被调用的?”或者可能疑惑: “当我输入 cat /proc/cpuinfo 时,cpuinfo() 函数是如何被调用的?”内核完成引导后,控制流就从相对直观的“接下来调用哪个函数?”改变为取决于系统调用.异常和中断. 什么是系统调用? 字面上讲,系统调用(也称为“syscall”)就是一条类似于“add”或者“jump”的指令.…
一. 什么是系统调用 在Linux的世界里,我们经常会遇到系统调用这一术语,所谓系统调用,就是内核提供的.功能十分强大的一系列的函数.这些系统调用是在内核中实现的,再通过一定的方式把系统调用给用户,一般都通过门(gate)陷入(trap)实现.系统调用是用户程序和内核交互的接口.  二. 系统调用的作用 系统调用在Linux系统中发挥着巨大的作用,如果没有系统调用,那么应用程序就失去了内核的支持. 我们在编程时用到的很多函数,如fork.open等这些函数最终都是在系统调用里实现的,比如说我们有…
在Solaris上写内核模块总是会用到互斥锁(mutex)与条件变量(condvar), 光阴荏苒日月如梭弹指一挥间,Solaris的大船说沉就要沉了,此刻心情不是太好(Orz).每次被年轻的有才华的同事们(比如Letty同学)问起mutex和cv怎么协同工作的,我总是不能给出一个非常清晰的解释.直到今天,看了cv_wait()的源代码之后,我终于可以给他们一个清楚明白的回答了. Solaris的源码无法被公开粘贴出来,幸好还有OpenSolaris的继承者illumos. 先贴cv_wait(…
万子惠 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验部分 选择24号getuid /getuid/ #include <unistd.h> #include <stdio.h> int main() { pid_t uu; uu=getuid(); printf("uu = %d \n", uu); return 0; } 执行…
转自:http://blog.chinaunix.net/uid-25968088-id-3426027.html 原文地址:Linux 编程中的API函数和系统调用的关系 作者:up哥小号 API:(Application Programming Interface,应用程序编程接口)  指的是我们用户程序编程调用的如read(),write(),malloc(),free()之类的调用的是glibc库提供的库函数.API直接提供给用户编程使用,运行在用户态.  我们经常说到的POSIX(Po…
上周总结了<C 标准库的基础 IO>,其实这些功能函数通过「系统调用」也能实现相应功能.这次文章并不是要详细介绍各系统调用接口的使用方法,而是要深入理解「库函数」与「系统」调用之间的关系和区别. 一.系统调用 系统调用,我们可以理解是操作系统为用户提供的一系列操作的接口(API),这些接口提供了对系统硬件设备功能的操作.这么说可能会比较抽象,举个例子,我们最熟悉的 hello world 程序会在屏幕上打印出信息.程序中调用了 printf() 函数,而库函数 printf 本质上是调用了系统…
382 + 原创作品转载请注明出处 + https://github.com/mengning/linuxkernel/ 一.实验环境 win10 -> VMware -> Ubuntu16.04 + GDB -> QEMU -> linux-3.9.4 + MenuOS 二.实验目的 1.理解Linux内核中创建一个进程的过程: 2.理解Linux内核加载可执行程序的过程: 3.理解Linux内核中的进程调度时机以及进程切换过程. 三.实验过程及结果 1.对于Linux内核中进程…
作者:刘世鹏20135304  <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.给MenuOS增加time和time-asm命令 1. 通过内核的方式(跟踪调试系统调用)来理解并使用系统调用. rm menu -rf //强制删除当前menu git clone http://github.com/mengning/menu.git //重新克隆新版本的menu cd menu ls make rootfs…