Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Operating system 线程数据存储在哪里?当操作系统执行其他进程时,操作系统如何将类似寄存器的值传递给CPU?_Operating System - Fatal编程技术网

Operating system 线程数据存储在哪里?当操作系统执行其他进程时,操作系统如何将类似寄存器的值传递给CPU?

Operating system 线程数据存储在哪里?当操作系统执行其他进程时,操作系统如何将类似寄存器的值传递给CPU?,operating-system,Operating System,我知道进程和线程调度。我想知道线程数据存储在哪里,以及当操作系统执行其他进程时,操作系统如何将类似寄存器的值传递给CPU。线程数据存储在操作系统管理的数据结构中的RAM中 当切换到另一个进程时,需要将寄存器中的值复制到RAM中,并且在继续执行另一个进程之前,将另一个进程的备份寄存器值从RAM复制回寄存器中。这就是所谓的 如果您想了解更多信息,请在谷歌上搜索“上下文切换”或“上下文切换”。谢谢您的回答。首先,我英语说得不好。所以我的问题似乎是错的。是的,正如您所说,寄存器值备份在RAM中。我知道。

我知道进程和线程调度。我想知道线程数据存储在哪里,以及当操作系统执行其他进程时,操作系统如何将类似寄存器的值传递给CPU。

线程数据存储在操作系统管理的数据结构中的RAM中

当切换到另一个进程时,需要将寄存器中的值复制到RAM中,并且在继续执行另一个进程之前,将另一个进程的备份寄存器值从RAM复制回寄存器中。这就是所谓的


如果您想了解更多信息,请在谷歌上搜索“上下文切换”或“上下文切换”。

谢谢您的回答。首先,我英语说得不好。所以我的问题似乎是错的。是的,正如您所说,寄存器值备份在RAM中。我知道。那么,谁控制(或调度)线程?谁检查线程的时间片?过程当然有cpu和menory,但我的问题是OST,这取决于您的操作系统,但让我们假设一个现代操作系统,如95之后的Windows、X之后的Linux和Mac操作系统。该操作系统将为I/O设置各种中断处理程序,还将设置一个计时器中断。触发定时器和I/O中断的是硬件——它只是一个当信号到达并触发CPU中断时执行某些操作的电路。当中断发生时,操作系统暂停当前进程并备份RAM中的寄存器,并检查哪个进程正在等待事件。然后,操作系统唤醒等待事件的进程。如果没有发生I/O事件,计时器中断将在某个时间触发。这将导致操作系统检查进程队列,以查看下一个进程应该运行哪个进程(按最长暂停时间、按优先级等——有很多算法用于此,一些操作系统(如LInux)允许您重新编译内核以使用不同的算法,例如RTLinux)。这就是单核/单线程CPU如何被多个进程/线程共享,以及四核/8线程CPU如何运行数千个线程操作系统基本上就是一堆中断处理器真的谢谢你。我从你那里学到了I/O和时间中断。最后一个问题,操作系统如何决定执行线程?比如进程调度?我知道PCB中存储的线程数据,操作系统决定使用PCB运行哪个线程?