嵌入式Linux中文站

深入解读Linux进程调度Schedule

阅读(300)

调度系统是现代操作系统非常核心的基础子系统之一,尤其在多任务并行操作系统(Multitasking OS)上,系统可能运行于单核或者多核CPU上,进程可能处于运行状态或者在内存中可运行等待状态。如何实现多任务同时使用资源并且提供给用户及时的响应实现实时交互以及提供高流量并发等对现代操作系统的设计实现带来了巨大挑战,而Linux调度子系统的设计同样需要实现这些看似矛盾的要求,适应不同的使用场景。 我们看到Linux是一个复杂的现在操作系统,各个子系统之间相互合作才能完成高效的任务。本文从围绕调度子系统,介绍

Linux进程组调度机制分析

阅读(328)

又碰到一个神奇的进程调度问题,在系统重启过程中,发现系统挂住了,过了30s后才重新复位,真正系统复位的原因是硬件看门狗重启的系统,而非原来正常的reboot流程。硬件狗记录的复位时间,将不喂狗的时间向前推30s分析串口记录日志,当时的日志就打印了一句话:sched: RT throttling activated。 从linux-3.0.101-0.7.17版本内核代码中可以看出,sched_rt_runtime_exceeded打印了这句话。在内核进程组调度过程中,实时进程调度受rt_rq-rt_thr

Linux进程调度原理

阅读(304)

转自: http://www.cnblogs.com/zhaoyl/archive/2012/09/04/2671156.html Linux进程调度的目标 1.高效性:高效意味着在相同的时间下要完成更多的任务。调度程序会被频繁的执行,所以调度程序要尽可能的高效; 2.加强交互性能:在系统相当的负载下,也要保证系统的响应时间; 3.保证公平和避免饥渴; 4.SMP调度:调度程序必须支持多处理系统; 5.软实时调度:系统必须有效的调用实时进程,但不保证一定满足其要求; Linux进程优先级 进程提供了两种

线程中断以及线程中断引发的那些问题

阅读(406)

什么是线程中断? 在我们的 Java 程序中其实有不止一条执行线程,只有当所有的线程都运行结束的时候,这个 Java 程序才算运行结束。 官方的话给你描述一下:当所有的非守护线程运行结束时,或者其中一个线程调用了 System.exit() 方法时,这个 Java 程序才能运行结束。 线程中断的应用场景 我们先来举一个例子,比如我们现在在下载一个 500 多 M 的大片,我们点击开始下载,那个这个时候就等于开启了一个线程去下载我们的文件,然而这个时候我们的网速不是很给力,几十 KB 的在这跑,作为一个年轻

Linux系统进程的知识总结,进程与线程之间的纠葛...

阅读(427)

当一个程序开始执行后,在开始执行到执行完毕退出这段时间内,它在内存中的部分就叫称作一个进程。 Linux 是一个多任务的操作系统,也就是说,在同一时间内,可以有多个进程同时执行。我们大家常用的单CPU计算机实际上在一个时间片段内只能执行一条指令。那么Linux是如

6种Linux进程间的通信方式

阅读(684)

进程的概念 进程是操作系统的概念,每当我们执行一个程序时,对于操作系统来讲就创建了一个进程,在这个过程中,伴随着资源的分配和释放。可以认为进程是一个程序的一次执行过程。 进程通信的概念 进程用户空间是相互独立的,一般而言是不能相互访问的。但很多情况下进程间需要互相通信,来完成系统的某项功能。进程通过与内核及其它进程之间的互相通信来协调它们的行为。 进程通信的应用场景 数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几兆字节之间。 共享数据:多个进程想要操作共享数据,一个进程对

必须了解的Linux系统中的进程调度

阅读(423)

操作系统要实现多进程,进程调度必不可少。有人说,进程调度是操作系统中最为重要的一个部分。我觉得这种说法说得太绝对了一点,就像很多人动辄就说某某函数比某某函数效率高XX倍一样,脱离了实际环境,这些结论是比较片面的。 而进程调度究竟有多重要呢? 首先,我们需要明确一点:进程调度是对TASK_RUNNING状态的进程进行调度。如果进程不可执行(正在睡眠或其他),那么它跟进程调度没多大关系。 所以,如果你的系统负载非常低,盼星星盼月亮才出现一个可执行状态的进程。那么进程调度也就不会太重要。哪个进程可执行,就让它执

linux 同步机制之complete

阅读(352)

在Linux内核中,completion是一种简单的同步机制,标志things may proceed。 要使用completion,必须在文件中包含linux/completion.h,同时创建一个类型为struct completion的变量。 [cpp] view plain copy 这个变量可以静态地声明和初始化: DECLARE_COMPLETION(my_comp); 或者动态初始化: struct completionmy_comp; init_completion(my_comp); 如