1.自我介绍(介绍你的背景和教育经历,特别强调与嵌入式系统相关的学习和项目经验)
2.linux中的线程一般是怎么调度的?
- 内核根据线程的优先级和调度策略来确定下一个要执行的线程。
- 内核维护一个调度队列,其中包含所有可运行(runnable)状态的线程。
- 当一个CPU核心空闲时,内核从调度队列中选择最高优先级的线程,并将其分配给该核心。
- 线程被放入正在运行(running)状态,并在该CPU上执行一段时间,直到发生某种事件(例如时间片用完、等待I/O、睡眠等)导致它进入阻塞(blocked)或睡眠(sleeping)状态。
- 如果一个线程进入阻塞或睡眠状态,内核会将其移出运行队列,并选择另一个可运行的线程继续执行。
- 当阻塞或睡眠的条件满足后,内核会重新唤醒相应的线程,并将其放回到运行队列中进行调度。
3.如果现在是一个单核的CPU,那么多个线程是按什么顺序去运行的?也就是线程的系统调度?
在单核CPU上,多个线程是通过时间片轮转调度算法来运行的。每个线程被分配一个固定的时间片(通常几毫秒),然后按照顺序依次执行。当一个线程的时间片用完时,内核会暂停该线程的执行,并切换到下一个等待执行的线程。
这种调度方式称为抢占式调度,因为内核可以在任何时间点中断正在运行的线程,并将CPU资源分配给其他等待执行的线程。具体而言,当以下情况发生时,当前运行的线程可能会被中断:
- 时间片用完:当一个线程耗尽其分配给它的时间片后&