个人揣测,刚开始,人们写完程序,要进行调试。调试的过程中,程序在人的思维中不是死的,而是运动着的。于是慢慢有了进程的概念。所谓进程,说白了就是正在运行中的程序相关的一些内涵外延等。程序要执行,一般要把可执行的代码加载进内存,然后跳到这段程序的起始地址运行。
起初阶段,可能只有一个进程被执行,之后随着多任务的发展需求,出现了多进程,于是有了进程调度,有了所谓的上下文切换。
先粘上牛哥这段话:
“最初的进程定义都包含程序、资源及其执行三部分,其中程序通常指代码,资源在操作系统层面上通常包括内存资源、IO资源、信号处理等部分,而程序的执行通常理解为执行上下文,包括对cpu的占用,后来发展为线程。”
随着进一步发展,人们发现,进程切换的时候,不一定所有东西都必须“重新开始”,比如上面提到的的资源部分--内存、I/O、信号处理等。也就是说,在完成同样的多任务的情况下,可以减小上下文开销,从而提高效率。于是世界上有了线程的概念。线程变成了调度的基本单位,而进程变成了资源分配的单位。到这里,我才真正的明白了别人提的问题的原因所在。
“自己解释不清楚的问题,八成是自己根本没有整明白啊。”
明天看有没有时间把linux线程的实现,内核中的do_fork等进程相关部分学习一下。将这篇自己的总结完善之。