arthur-zhang / morning-up-up

78 stars 6 forks source link

1209 分享:系统调用与汇编 #32

Open arthur-zhang opened 3 years ago

arthur-zhang commented 3 years ago

作业:用汇编使用 int 0x80 和 syscall 分别写一个输出 hello world 的程序

IKNOWLJT commented 3 years ago

4. 系统调用

计算机系统的各种硬件资源是有限的,在现代多任务操作系统上同时运行的多个进程都需要访问这些资源,为了更好的管理这些资源进程是不允许直接操作的,所有对这些资源的访问都必须有操作系统控制。也就是说操作系统是使用这些资源的唯一入口,而这个入口就是操作系统提供的系统调用(System Call),系统调用和普通库函数调用非常相似,只是系统调用由操作系统核心提供,运行于内核态,而普通的函数调用由函数库或用户自己提供,运行于用户态

在linux中系统调用是用户空间访问内核的唯一手段,除异常和陷入外,他们是内核唯一的合法入口。操作系统一般是通过中断从用户态切换到内核态。中断就是一个硬件或软件请求,要求CPU暂停当前的工作,去处理更重要的事情。

系统调用在用户空间进程和硬件设备之间添加了一个中间层。该层主要作用有三个:

4.1 查看系统调用

strace 在linux系统中某个程序执行时进行的系统调用可以通过strace命令来查看,多线程的线程必须加上 -f 参数

  • 通过int 0x80(128)号软中断触发系统调用
  • 触发系统调用的时候,eax寄存器存储了系统调用的编号,而其他的几个寄存器用来传递参数的
4.2 传统系统调用 32 位系统
4.3 快速系统调用