一、学习笔记: 1.中断处理过程:包括时钟中断、I/O中断、系统调用和异常。直接调用schedule()函数,在队列中找到进程并分配CPU或返回用户态时根据need_resched标记调用schedule()。 2. 内核线程只有内核态没有用户态,可以直接调用schedule()进行进程之间的切换, ...
分类:
系统相关 时间:
2017-11-26 21:04:22
阅读次数:
255
进程的切换和系统的一般执行过程 1.知识总结 (1)进程调度的时机: 中断处理过程直接调用schedule(),或者返回用户态时根据need_resched标记调用schedule()。 内核线程是一个特殊的进程,只有内核态没有用户态,可以直接调用schedule()进行进程切换,也可以在中断处理过 ...
分类:
系统相关 时间:
2017-11-25 21:43:40
阅读次数:
154
理解进程调度时机 ==================================== 进程调度时机 中断处理过程(包括时钟中断、I/O中断、系统调用和异常)中,直接调用schedule(),或者返回用户态时根据need_resched标记调用schedule(); 内核线程可以直接调用sche ...
分类:
系统相关 时间:
2017-11-25 17:26:13
阅读次数:
193
http://blog.csdn.net/gatieme/article/details/51892437 之前讲解过内核线程、轻量级进程、用户线程三种线程概念解惑(线程≠轻量级进程), 但是一直对其中提到的线程的实现模型比较迷惑, 这次就花了点时间怎么学习了一下子 1 线程的3种实现方式 在传统的 ...
分类:
编程语言 时间:
2017-11-24 16:58:52
阅读次数:
174
一、宏观实现 以前介绍过fork()和clone()的区别,下面介绍一下两者在程序接口上的不同: 系统调用__clone()的主要用途是创建一个线程,这个线程可以是内核线程,也可以是用户线程。创建用户空间线程时,可以给定子线程用户空间堆栈的位置,还可以指定子进程运行的起点。同时,也可以用__clon ...
分类:
其他好文 时间:
2017-11-07 22:22:44
阅读次数:
186
在linux系统中,第一个进程是系统固有的,与生俱来的或者说是由内核的设计者安排好了的,内核在引导并完成了基本的初始化以后,就有了系统第一进程(实际上是内核线程)。除此之外,所有其他的进程和内核线程都有这个原始进程或其子孙进程所创建,都是这个原始进程的后代。 linux将进程的创建和执行分成两步。 ...
分类:
系统相关 时间:
2017-11-04 14:54:15
阅读次数:
257
我们都知道Go语言是原生支持语言级并发的,这个并发的最小逻辑单元就是goroutine。goroutine就是Go语言提供的一种用户态线程,当然这种用户态线程是跑在内核级线程之上的。当我们创建了很多的goroutine,并且它们都是跑在同一个内核线程之上的时候,就需要一个调度器来维护这些gorout ...
分类:
其他好文 时间:
2017-10-10 13:09:23
阅读次数:
193
本文旨在简单介绍一下Linux内核线程: 先举个例子: 不插U盘,在Linux命令行中输入:ps -el;然后插上U盘,再次输入:ps -el 会发现多出了下面一行(当然还会有其他的,比如scsi相关的): usb-storage 就是U盘驱动程序(驱动程序是动态加载的)起来之后,由内核创建的内核线 ...
分类:
编程语言 时间:
2017-09-23 23:19:23
阅读次数:
215
Linux从内核2.6开始使用NPTL (Native POSIX Thread Library)支持,但这时线程本质上还轻量级进程。 Java里的线程是由JVM来管理的,它如何对应到操作系统的线程是由JVM的实现来确定的。Linux 2.6上的HotSpot使用了NPTL机制,JVM线程跟内核轻量 ...
分类:
编程语言 时间:
2017-09-06 19:41:17
阅读次数:
187
init是用户空间第一个程序,在调用init前程序都运行在内核态,之后运行init时程序运行到用户态。 操作系统上,一些内核线程在内核态运行,它们永远不会进入用户态。它们也根本没有用户态的内存空间。它的线性地址空间就是共享内核的线性地址空间。一些用户进程通常在用户态运行。有时因为系统调用而进入内核态 ...
分类:
其他好文 时间:
2017-08-27 12:44:24
阅读次数:
214