wiki:LinuxStart

Linux操作系统分析

Android软件堆栈分析?

这里用来记录学习Linux系统编程、内核、软件体系结构的学习总结和资料汇总的地方。 主要基于32位X86体系结构、AT&T汇编语言等

整理编写:孟宁 mengning@…

进程的执行

  • 高级语言函数调用规范
  • ELF可执行文件格式
  • 静态库和共享库、进程的线性地址空间
  • 应用开发者眼中的进程创建和执行

CPU编程界面

应用编程接口API与系统调用

  • 应用编程接口API只是函数定义,用来说明如何获得给定的服务;而系统调用是通过软中断向内核态发出一个明确的请求。
  • 应用编程接口的封装例程通过使用int $0x80或sysenter指令进入内核态, 并使用%eax通知内核所需要的服务(系统调用号),使用%ebx、%ecx、%edx、%esi、%edi和%esp寄存器来传递系统调用的参数(参数可以是地址/指针),由system_call()或者sysenter_entry()将寄存器的数据压入内核堆栈,并调用系统调用服务例程,这样就和普通C函数调用一致了。参见参考文献【1】第十章系统调用
  • Libc对系统调用的封装

搭建Linux内核编译调试环境

进程、轻量级进程、线程和内核线程

理解操作系统的关键:

  • CPU(单CPU系统)是一条指令一条指令执行的;
  • 进程是执行上下文、定义一个执行流,有特别权限的进程管理其他进程,也就是分配CPU执行时间;
  • 轻量级进程是为了支持多线程(一个进程中有多个执行流)而使多个进程共享一些资源,从操作系统的角度看没有线程,全部通过进程来分配资源并进行调度管理,但从多线程应用开发者的角度看,它似乎在同一个进程中创建多个执行流(线程);
  • 而内核线程并不是线程,而是一个特殊一点的进程,仅工作在内核态,一般是一些服务程序为了避免内核态和用户态切换的开销,而普通进程一般根据需要通过系统调用在内核态和用户态之间反复切换。

进程调度

进程地址空间

进程间通信

学习心得

参考资料

Last modified 5 years ago Last modified on 12/11/12 16:27:28

Attachments (3)

Download all attachments as: .zip