定时器中断和调度

时间:2017-03-22 01:28:12

标签: timer operating-system interrupt scheduler clock

我很难理解定时器中断与系统调度程序的关系以及DPC(延迟过程调用)在所有这些中的作用。这就是我的理解(纠正我,如果我错了):

1)在每个时钟间隔产生一个中断,导致当前进程暂停,时钟中断处理程序在上下文切换后开始运行。

2)处理程序运行调度程序,该调度程序检查某个进程是否由于IO操作等而耗尽了运行时间或停止执行...

所以我的第一个问题是:调度程序实际上是在每个时间间隔运行吗?

我的第二个问题是:DPC在这里的作用是什么,它与调度程序有关吗?

(我试图从维基百科上了解但是并不完全理解"调度"那里提到的那些)

感谢。

3 个答案:

答案 0 :(得分:1)

  

调度程序实际上是在每个间隔运行吗?

是和否,调度程序仅在using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.EntityFrameworkCore; namespace WebApplication1.Models { public class ClassesController : Controller { private readonly WebApplication1Context _context; public ClassesController(WebApplication1Context context) { _context = context; } // GET: Classes public async Task<IActionResult> Index() { return View(await _context.Class.ToListAsync()); } // GET: Classes/Details/5 public async Task<IActionResult> Details(int? id) { if (id == null) { return NotFound(); } var @class = await _context.Class .SingleOrDefaultAsync(m => m.ID == id); if (@class == null) { return NotFound(); } return View(@class); } // GET: Classes/Create public IActionResult Create() { return View(); } // POST: Classes/Create // To protect from overposting attacks, please enable the specific properties you want to bind to, for // more details see http://go.microsoft.com/fwlink/?LinkId=317598. [HttpPost] [ValidateAntiForgeryToken] public async Task<IActionResult> Create([Bind("ID,Grade")] Class @class) { if (ModelState.IsValid) { _context.Add(@class); await _context.SaveChangesAsync(); return RedirectToAction("Index"); } return View(@class); } // GET: Classes/Edit/5 public async Task<IActionResult> Edit(int? id) { if (id == null) { return NotFound(); } var @class = await _context.Class.SingleOrDefaultAsync(m => m.ID == id); if (@class == null) { return NotFound(); } return View(@class); } // POST: Classes/Edit/5 // To protect from overposting attacks, please enable the specific properties you want to bind to, for // more details see http://go.microsoft.com/fwlink/?LinkId=317598. [HttpPost] [ValidateAntiForgeryToken] public async Task<IActionResult> Edit(int id, [Bind("ID,Grade")] Class @class) { if (id != @class.ID) { return NotFound(); } if (ModelState.IsValid) { try { _context.Update(@class); await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!ClassExists(@class.ID)) { return NotFound(); } else { throw; } } return RedirectToAction("Index"); } return View(@class); } // GET: Classes/Delete/5 public async Task<IActionResult> Delete(int? id) { if (id == null) { return NotFound(); } var @class = await _context.Class .SingleOrDefaultAsync(m => m.ID == id); if (@class == null) { return NotFound(); } return View(@class); } // POST: Classes/Delete/5 [HttpPost, ActionName("Delete")] [ValidateAntiForgeryToken] public async Task<IActionResult> DeleteConfirmed(int id) { var @class = await _context.Class.SingleOrDefaultAsync(m => m.ID == id); _context.Class.Remove(@class); await _context.SaveChangesAsync(); return RedirectToAction("Index"); } private bool ClassExists(int id) { return _context.Class.Any(e => e.ID == id); } } } 发生时运行。我认为还有一个误解。让我清楚一点。

在每个时间间隔中,中断不会,但会检查中断输入(对于电平触发的中断),如果在该时间间隔内发生中断只有调度程序运行,则它不会运行如果该间隔没有中断。

  

DPC在这里的作用是什么,它与调度程序有关吗?

引自维基百科

  

延迟过程调用(DPC)是Microsoft Windows操作系统   允许高优先级任务(例如中断)的系统机制   处理程序)推迟所需但较低优先级的任务以供日后使用   执行。这允许设备驱动程序和其他低级别事件   消费者执行其处理的高优先级部分   快速,并安排非关键的额外处理执行   优先级较低。

显然,DPC与调度程序无关,因为它的工作是决定CPU上接下来要运行的内容,而DPC是处理器延迟执行低优先级进程的机制。

答案 1 :(得分:1)

  

1)在每个时钟间隔产生一个中断,导致当前进程暂停,时钟中断处理程序在上下文切换后开始运行。

中断处理中没有上下文切换。无论如何,当时正在运行的进程处理中断(某些操作系统使用不同的术语,但它实际上是相同的)。

  

2)处理程序运行调度程序,该调度程序检查某个进程是否由于IO操作等而耗尽了运行时间或停止执行...

这完全取决于操作系统。但是,由于IO操作,它不会检查&#34;停止执行&#34;因为当阻塞I / O操作排队时会发生这种情况。

  

所以我的第一个问题是:调度程序实际上是在每个时间间隔运行吗?

这在很大程度上取决于你认为是调度程序。它也是系统特定的。它取决于过程量子与定时器间隔之间的关系。

如果考虑检查过程量程是否已过期成为调度程序的一部分,那么您可能会说调度程序可能在每个定时器间隔运行。

  

我的第二个问题是:DPC在这里的作用是什么,它与调度程序有关吗?

中断处理程序需要很短但是时间和堆栈目的。许多操作系统安排将事件传递给进程。 Windoze的核心,就像之前的VMS一样,是一个软件中断驱动系统。这些可以作为定时器中断的一部分传送到进程。

可能会发生这样的序列:

  1. 进程对异步I / O请求进行排队 。 。 。时间流逝。
  2. 进程再次执行。
  3. I / O请求完成时发生中断。操作系统通过排队进行响应。 4.Process再次执行
  4. 定时器中断熄灭。中断处理程序会导致进程发生异步通知。

答案 2 :(得分:0)

定时器中断是一种与抢占密切相关的技术。当进程获得CPU时,可以将计时器设置为指定的时间间隔。如果进程在间隔结束时仍在使用CPU,则会被抢占。