linux基本命令行(二)
进程-内存-文件
进程
创建进程的的系统调用叫fork,创建一个新的进程,需要一个老进程调用fork来实现,老的进程被称为父进程,新的进程被称为子进程。
- 当父进程调用fork创建进程的时候,子进程将拷贝父进程所有的文件。
- 针对这种情况我们往往这样处理:对于fork系统调用的返回值,如果当前进程是子进程返回0;如果是父进程就返回子进程的进程号。
- 通过if-else判断 进行系统执行,子进程需要请求一个叫execve来执行另一个程序。此时就产生了一个fork。
内存
在操作系统中,每个进程都有独立的内存空间,互相不干扰。
- 存放代码部分的内存空间 我们称之为代码段(Code Segment)
- 存放进程执行过程中产生数据的部分,我们称之为数据段(Data Segment)
- 内存中动态分配的部分,我们称之为堆(heap)
- 堆中的内存只有当真正写入数据时才会分配物理内存
堆
摘自:https://sploitfun.wordpress.com/2015/02/11/syscalls-used-by-malloc/
- brk: brk通过增加程序中断位置获得内存(非0初始化),start(start_brk)和堆段的末尾(brk)是指向同一段地址的。适合较小的内存数量,和原来堆内数据连在一起。
- 当ASLR关闭时,start_brk和brk将指向数据段/静态内存段(bss segment)结尾(end_data)
- 当ASLR开启时,start_brk和brk将等于数据段/静态内存段结尾加上随机brk偏移
- mmap:malloc使用mmap创建一段匿名私有的内存映射,匿名私有的内存映射来分配内存空间并且只被调用进程使用。适合用于分配较大内存数量,重新划分一块内存区域。
文件
linux中一切皆文件