2019年3月6日

摘要: 一、问题引出 对于主线程(也就是main函数对应的线程),它并不是通过pthread_create创建的线程,所以我们没有这个主线程对应的pthread_t结构,这个结构也就是pthread_create的第一个参数。这当然只是最为直观的一个结论,事实上系统不会这么羸弱,在main函数中通过pthr 阅读全文
posted @ 2019-03-06 20:40 tsecer 阅读(530) 评论(0) 推荐(0) 编辑
摘要: 一、引出 在Linux系统下,通过 dd + losetup + mkfs 创建一个根文件系统已经是创建一个Linux根文件系统的一个常规方法。由于这个是通过一个loop设备来创建的文件,所以这个loop文件是把一个文件看做是一个设备,这个还是一个相对比较高难度的一个适配,因为上层肯定是使用了块设备 阅读全文
posted @ 2019-03-06 20:38 tsecer 阅读(788) 评论(0) 推荐(0) 编辑
摘要: 一、问题的引出 在Linux系统中,当内核发生panic的时候,我们可能希望能够保留内核的现场,就像当用户态程序异常的时候内核对应用程序的“吐核”一样(注意,不是吐槽)。但是应用程序的吐核是由内核来完成的,那么内核自己真正的吐自己该如何完成呢? 二、实现方法 这个实现是和kdump结合来实现的,这个 阅读全文
posted @ 2019-03-06 20:37 tsecer 阅读(600) 评论(0) 推荐(0) 编辑
摘要: 一、引出 在在嵌入式操作系统中,很多线程都可以为实时任务,因为毕竟这些线程很少和人接触,而是面向任务的。所有就有一个抢占的时机问题。特别是2.6内核中引入了新的内核态抢占任务,所以就可以说一下这个内核态抢占的实现。 内核态抢占主要发生在两个时机,一个是主动的检测是否需要抢占,另一个就是在异常处理完之 阅读全文
posted @ 2019-03-06 20:36 tsecer 阅读(4416) 评论(0) 推荐(1) 编辑
摘要: 一、中断和异常 这两个概念虽然处理的方式大致相同,但是本质上是有很大差别的,而且在386下它们的处理和语义对系统中最为重要的内容的理解是很重要的。 首先一个最为重要的差别就是: 当中断发生的时候,处理器在执行了Cs IP EFLAGS(可能还由用户态的SS和ESP)这个一气呵成的寄存器保存之后,处理 阅读全文
posted @ 2019-03-06 20:35 tsecer 阅读(445) 评论(0) 推荐(0) 编辑
摘要: 一、问题 任务的基本状态就是可运行与不可运行,这是一个任务的基本状态,正是运行的任务完成了真正的内核功能,而非运行的任务实现了任务的同步。所以任务的运行与非运行的转换是内核调度的一个基本功能。 二、设置的时机和方式 1、任务的去活跃 从调度的代码中看,一个线程设置为活跃与不活跃的两个最基本的操作分别 阅读全文
posted @ 2019-03-06 20:34 tsecer 阅读(505) 评论(0) 推荐(0) 编辑
摘要: 一、问题的引出 在多线程用户态程序中,为了更加准确详细的从一个线程观察另一个线程的行为,可能有时候需要让目标线程暂时安静下来,从而便于观测和监控。关于这个行为,首先想到的当然就是向一个线程发送一个SIGSTOP信号(注意,不是向进程,就是通过内核的tkill系统调用,或者说pthread_kill) 阅读全文
posted @ 2019-03-06 20:33 tsecer 阅读(3424) 评论(0) 推荐(0) 编辑
摘要: 一、引出 大家都知道,信号是在进程返回用户态的时候触发执行的一种机制,但是对于内核线程来说,它们并不会返回用户态。这就好像《大话西游》里打劫脚底板的时候那位坐轿的官人没有脚底板一样尴尬。另一方面,通过sigprocmask是不能屏蔽掉SIGKILL和SIGSTOP两个信号的,所以如果我们通过kill 阅读全文
posted @ 2019-03-06 20:32 tsecer 阅读(1407) 评论(0) 推荐(2) 编辑
摘要: 一、问题的引出 对于很多的Linux下程序,我们有时候并不像详细的知道它执行的每一条指令或者,或者我们不想(或者不能)进行源代码级的调试,而只实现想大致看一下某个程序它执行了哪些核心的API调用,从而判断出程序执行的关键路径。此时使用strace是一个不错的选择,它可以不间断的执行完一个子程序,从而 阅读全文
posted @ 2019-03-06 20:31 tsecer 阅读(545) 评论(0) 推荐(0) 编辑
摘要: 一、pthread结构中获取tid 这个问题是由于很多时候我们都是通过gettid来获得一个线程的tid,其实这个是一个非常简单的系统调用,但是即使它非常简单,我们还是要执行进行系统调用而引入的寄存器保存/恢复等操作。但是,在C库的pthread库的实现过程中,我们可以看到,用户态是肯定保存了一个线 阅读全文
posted @ 2019-03-06 20:30 tsecer 阅读(906) 评论(0) 推荐(0) 编辑

导航