Linux进程
pk_20140716
缘起于BIOS,发展于内核,直至进程启动,电脑的世界开启了!
展开
-
程序入口函数和glibc及C++全局构造和析构
1,程序入口函数和初始化 操作系统在装载可执行文件后,将把控制权交付给运行库的程序入口函数。 因此,程序首先运行的代码并不是main函数,而是负责为main函数执行创造环境,并负责调用main的入口函数(Entry Point)。main函数返回的值也会被这个入口函数所记录,然后调用atexit注册的函数,最终结束进程。 这样,程序的执行流程如下所示: 1,操作转载 2015-05-12 20:17:35 · 1377 阅读 · 0 评论 -
关于Linux内核同时运行进程总数的讨论
本文讨论内核以Linux1.0为例。Linux内核为每个进程创建了struct task_struct结构,保存每个进程所独有的数据。独立于用户进程空间。(用户进程空间是整个程序主体,包含代码段,数据段,堆栈段。)Linux中用进程结构指针数组的方式提供了NR_TASKS(128)个可用的空间,当需要进程时可以遍历数组,查找为NULL项,然后申请一个页面存放进程结构主体,在将NULL项指原创 2015-05-21 18:48:10 · 597 阅读 · 0 评论 -
关于Linux进程环境
32位的Linux操作系统使用分页机制为每个进程提供了4G线性地址空间。其中1G空间用于内核,3G空间用于用户空间。内核开始于0xC0000000,占用0xC0000000以下的IG内存。用户空间开始于0x00000000至0xC0000000,占用3G内存。关于1G内核运行的机制不在本文的描述之内,本文主要描述3G空间的使用。进程是从fork系统调用开始的。fork是Linux下生成原创 2015-05-09 19:00:10 · 520 阅读 · 0 评论 -
glibc启动代码实现流程
本文主要参考程序入口函数和glibc及C++全局构造和析构glibc的启动代码起始于sysdeps/i386/dl-manchine.h中的_start函数_start: /*置ebp为0*/ xorl %ebp, %ebp /*弹出argc至esi*/ popl %esi /*至ecx为argv*/ movl %esp, %ecx /*地址为16的倍数*原创 2015-05-11 17:42:46 · 747 阅读 · 0 评论 -
命令行参数
命令行参数命令行参数是控制命令执行的一种方式。 命令行参数类似于函数的参数,只是命令行参数是传送给命令的。命令执行时,内核已经将命令行参数放入命令的栈中,命令执行时则可以获取命令行参数,解析,执行。命令行参数使命令可以执行不同任务。linux下的实现int execve(const char *pathname,char *const argv[],char *const envp[]);exe原创 2015-08-27 16:01:59 · 570 阅读 · 0 评论 -
简单完成Linux进程启动代码
正如我在关于Linux进程环境所讲每个C程序执行main函数之前都有一段启动代码,完成启动main所需的设置。glibc中的启动代码的实现可以参见:程序入口函数和glibc及C++全局构造和析构 而我在本文中将实现一个简单的启动程序(32位系统),启动程序分为start.s和init.c两个文件。代码见下方。start.s:.text.globl initstart: ca原创 2015-05-10 12:55:12 · 699 阅读 · 0 评论 -
Linux进程-命令行参数和环境列表
命令行参数在C中,main函数有很多的变种,比如main(),int main(),int main(int argc, char *argv[]),int main(int argc, char *argv[], char *env[])。在很长一段时间里(特别是在windows下),我都不清楚后面两种main函数中这么多参数有什么用,直到转到linux下,才明白了这些参转载 2015-08-26 19:10:58 · 399 阅读 · 0 评论 -
程序的内存布局——函数调用栈的那点事
http://blog.csdn.net/yang_yulei/article/details/45795591[注]此文是《程序员的自我修养》的读书总结,其中掺杂着一些个人的理解,若有不对,欢迎拍砖。程序的内存布局现代的应用程序都运行在一个虚拟内存空间里,在32位的系统里,这个内存空间拥有4GB的寻址能力。现代的应用程序转载 2015-05-24 16:27:06 · 435 阅读 · 0 评论 -
Linux的进程管理
http://linux.chinaunix.net/techdoc/system/2008/11/08/1044016.shtml第二章 Linux的进程管理Linux是一个多任务多用户操作系统,一个任务(task)就是一个进程(process)。每一个进程都具有一定的功能和权限,它们都运行在各自独立的虚拟地址空间。在Linux中,进程是系统资源分配的基本单位转载 2015-05-20 11:05:05 · 475 阅读 · 0 评论