又很久没有怎么学习了,整天是浑浑厄厄的,马上就要找工作了,别说两把刷子了,一把都没有,从今天开始,每两天要把总结的东西写到blog上,开始一个新的旅程。
进程管理:
1、进程 是处于执行期的程序,以及它所包含的资源的总合。在Linux中不区分进程与线程的概念,线程只是它共享资源的一种方法。
2、调用fork()的进程被称为父进程,产生的新进程被称为子进程。在Linux中使用写时拷贝技术来避免大量不用的数据在父子进程间拷贝。
3、调用exec()这个函数族就可以创建新的地址空间,并把新的程序载入。
4、最终,程序会通过exit()系统调用退出执行。
5、进程链表中的每一项都是类型为task_struct,称为进程的描述符结构,它包含的数据能完整地描述一个正在执行的程序:它打开的文件,进程的地址空间,挂起的信号,进程的状态等。
6、Linux中通过slab分配器分配task_struct结构,这样能达到对象复用和缓存着色的目的。
7、系统调用和异常处理程序是对内核明确定义的接口,进程只有通过这些接口才能陷入到内核执行,对内核的所有访问都必须通过这些接口。
8、进程的创建:首先,fork()通过拷贝当前进程创建一个子进程,子进程与父进程的区别仅仅在于PID、PPID和某些资源和统计量,exec()函数负责读取可执行文件并将其载入地址空间开始运行。
9、Linux的fork()使用了写时拷贝(copy-on-write)页实现,这是一种可以推迟甚至免除拷贝数据的技术,内核此时并不复制整个进程,而是让父子进程共享同一个拷贝,只有在需要写入的时候,数据才会被复制,从而使各个进程拥有各自的拷贝。当调用了fork()函数创建了子进程时,系统让子进程先运行,从而避免父进程写入空间,那么写时拷贝技术就没有起作用了。
10、在Linux中所有的线程都当做了进程来实现,每一个线程都拥有唯一属于自己的task_struct。
11、Linux与其它系统的线程有区别,Linux的线程只是共享资源一种方式,线程与进程的创建类似,只不过在调用clone()的时候需要传递一些参数标志,来指明需要共享的资源,也就是说,新建的进程与它的父进程都叫做线程。
12、内核线程与普通进程的区别在于内核线程没有独立的地址空间,在内核空间运行从不切换到用户空间去。
13、调度,在一组处于运行状态的进程中选择一个来执行,这就是调度程序要完成的基本工作。
阅读(1437) | 评论(1) | 转发(0) |