为了构思线程,苹果是如何下降的

时间:2017-01-21 17:53:32

标签: operating-system

我正在阅读以下有关操作系统的讲义:

http://williamstallings.com/Extras/OS-Notes/h2.html

我能得出的是“进程是一个执行流,即基本上是一系列语句,因此是一个线程。但是,一个进程的寄存器状态独立于另一个进程的寄存器状态但是寄存器可以在线程内部访问另一个线程的状态。对于每个进程,至少分配一个线程或专用,当进程启动时,该进程的OS活动由线程(或线程)接管“

构思线程概念背后的理由是什么?当操作系统运行特定进程时,为什么我们需要一些中介,如它们之间的线程?

“但是,一个进程的寄存器状态独立于另一个进程的寄存器状态,但另一个线程的寄存器状态可以在一个线程内访问”。 可以将上述语句视为进程的代码,我们无法访问另一个进程的寄存器状态但是在一个线程的代码中我们可以访问另一个线程的寄存器状态吗? (上面的问题确实将进程和线程的定义替换为代码或流序列)

P.S:问题的标题是一个隐喻的问题。如果它以任何方式误导,请原谅。 :P我可以冒昧扩大并问如果 处理器为每个进程生成一个线程,它在一个线程的代码中写了什么?(一个线程的代码怎么样?)

2 个答案:

答案 0 :(得分:1)

术语 - 对于具有虚拟内存的系统,线程共享相同的虚拟内存地址空间,而每个进程都拥有自己的地址空间。进程可以通过将一部分内存共享到其虚拟地址空间来共享物理内存(但每个进程的虚拟地址可能不同,即使它是相同的物理内存块)。

早期(1960年代)的多处理实例是运行多个进程的大型机,这些进程通常不会相互通信。大多数此类活动是针对面向批处理的作业,通常来自打孔读卡器,或者在更高级的情况下,从远程作业输入站点运行的作业流,这些站点是具有少量外围设备的其他计算机(读卡器,磁带机,行式打印机......)与大型机通信以运行作业。还有时间共享应用程序,类似于服务器,除了在许多情况下,相对愚蠢的终端用于与主框架通信。到了1970年代,APL / SV(程序设计语言/共享变量)是一种时间共享应用程序/编程语言,可以在用户之间共享变量。

对于多进程/多线程操作系统,设备驱动程序根据请求队列(例如文件读取或写入)进行操作。要添加到设备驱动程序队列的每个请求都与上下文切换类似,因此在进程或线程I / O请求之间不会发生冲突。某些外围设备(如大型机,SCSI或...磁盘驱动器)也可以从内部队列运行,并且可以无序处理I / O请求以减少随机访问开销。

答案 1 :(得分:0)

驱动线程的基本问题是应用程序如何同时处理多个任务并以独立于系统的方式执行?

在古典太监中,一个过程一次只能做一件事。如果您需要处理多个事情,那么您将启动多个流程。

在旧版RSX和VMS系统(以及封面下的Windoze)中,程序员依赖于软件中断。进程可以将I / O请求排入多个设备,并在请求完成时接收软件中断,从而允许应用程序同时执行多项操作。

同时出现多种问题的另一种方法是使用事件队列(Windoze,X Windows)。

ADA编程语言是第一种(并且仍然是唯一的)主流编程语言,它支持线程(任务)作为处理这类问题的独立于系统的方法。 DOD合规性要求推动了线程的创建。

最初,线程是通过库实现的(“使用线程”,“多对一模型”)。随着多处理器系统的兴起,越来越需要能够在不同的处理器上并行执行线程。这推动了操作系统中内核线程的创建。 (许多操作系统仍然不支持内核线程)。