1.单CPU系统中如何同时执行多个进程?请解释该过程中发生的上下文切换。
答:只有1个CPU(CPU的运算设备CORE)的系统中不是也可以同时运行多个进程吗?只是因为系统将CPU时间分成了多个微小的块后分配给了多个进程。为了分时使用CPU,需要“上下文切换”的过程。
上下文切换:如果运行进程A后需要紧接着运行进程B,就应该将进程A的相关信息移出内存,并读入进程B的相关信息,这就是上下文切换。
2.为何线程上下文切换更快?线程间数据交换为何不需要类似IPC的特别技术?
答:(1)因为线程上下文切换不需要切换数据区和堆。(2)可以利用数据区和堆交换数据
3.请从执行流角度说明进程和线程的区别。
答:如果说进程在操作系统内部生成多个执行流,那么线程就在同一进程内部创建多条执行流,因此,操作系统,进程,线程之间的关系可以通过图来表示(图略)
4.请说明完全销毁Linux线程的2种方法。
答:
方法一:利用pthread_join()函数。
#include <pthread.h>
int pthread_join(pthread_t thread, void **retval);
参数:
thread是要等待的线程的ID。
retval是一个二级指针,指向线程函数的返回值(线程函数返回void*)
返回值:
如果函数执行成功返回0,否则会返回一个错误码。
方法二:利用pthread_detach()函数
其函数原型如下:
#include <pthread.h>
int pthread_detach(pthread_t thread);