UNIX环境高级编程-进程的运行时环境和运行时资源

Chapter 7-9 [TOC] Runtime Environment 当系统启动时,内核代码被加载到内存,初始化后启动第一个用户进程,然后内核的代码就等着用户进程来调度了。 代码在编译之后会生成一个可执行程序。运行程序其实是用户进程(Shell进程)指示内核要启动另一个用户进程,内核便为这个新的进程分配资源,并加载该进程的代码和数据。 一个程序可以被运行多次,除非发生资源抢占可能会发生启动失败。 Runtime Resources PCB 进程运行时,内核为进程每个进程分配一个PCB(进程控制块),描述进程的详细信息。 PCB在内核中对应的结构体是task_struct。 Virtual Memory 每个进程都会分配虚拟地址空间,在 32 位机下,该地址空间为 4G 。 而在 64 位机下,其虚拟地址只使用了 48 位。所以C程序里,打印的地址都是只有 12 位 16 进制 ,最高为FFFF FFFF FFFF。由于当前 AMD 和 Intel … “UNIX环境高级编程-进程的运行时环境和运行时资源”

Read More

UNIX环境高级编程-File I/O

Chapter 3. File I/O 文件描述符 在Linux系统中,打开的文件是用一个整数来表示的,表示打开文件的整数,称之为文件描述符。当需要往写数据/读数据时,读写函数都需要文件描述符作为参数,以便系统知道用户操作的时哪个文件。 基本操作 open/creat mode选项 解释 O_RDONLY 读方式打开 O_WRONLY 写方式打开 O_RDWR 读写方式打开 O_CREAT 创建文件,如果文件存在,会被截断 O_TRUNC 截断 O_APPEND 追加 O_EXCL 和O_CREAT一起用,如果文件存在则失败 close 关闭文件 read/write 读写文件,会导致文件指针移动。 文件指针和lseek 文件指针是一个整数,描述当前读写位置,可以使用lseek移动文件指针。 文件共享 两个进程可以打开同一个文件进行操作,实现数据的共享。但是当两个文件打开同一个文件进行写操作时,会相互覆盖。当文件被打开两次时,两个文件描述符有各自的文件指针。 内核保存一个全局的文件描述结构体,而一个文件打开两次之后,两个结构体各自有各自的文件指针。 dup/dup2/dup3 dup函数可以复制文件描述符,让两个文件描述符指向同一个文件结构,通过dup复制文件描述符和两次打开文件描述符不同,所以两个文件描述符共享一个文件指针。 … “UNIX环境高级编程-File I/O”

Read More