2016年10月27日

linux内核情景分析之强制性调度

摘要: 从系统调用返回到用户空间是否调度,从ret_with_reschedule可看出,是否真正调度,取决于当前进程的pcb中的need_resched是否设置为1,那如何设置为1取决于以下几种情况:时间中断处理程序,发现当前进程运行时间过长:每次发生时间中断,都要递减该进程的时间片,一旦count为0,强制调度,剥夺当前进程运行void update_process_times(int user_ti... 阅读全文

posted @ 2016-10-27 10:57 笨拙的菜鸟 阅读(928) 评论(0) 推荐(0) 编辑

linux内核之系统调用nanosleep与pause()

摘要: nanosleep()使得进程进入睡眠状态,指定时候后唤醒进程,sleep()基于其实现asmlinkage long sys_nanosleep(struct timespec *rqtp, struct timespec *rmtp)//第一个指针rqtp指向给定所需睡眠时间的数据结构;第二个指针rmtp,指向返回剩余时间的数据结构,可能收到信号提前唤醒.{ struct timespec t... 阅读全文

posted @ 2016-10-27 10:56 笨拙的菜鸟 阅读(3017) 评论(0) 推荐(0) 编辑

linux内核情景分析之锁机制

摘要: /* * These are the generic versions of the spinlocks and read-write * locks.. *///自旋锁加锁,irqsave表示把标志寄存器存储起来#define spin_lock_irqsave(lock, flags) do { local_irq_save(flags);//关闭本地中断,保存标志位 spin_... 阅读全文

posted @ 2016-10-27 10:54 笨拙的菜鸟 阅读(781) 评论(0) 推荐(0) 编辑

linux内核情景分析之内核中的互斥操作

摘要: 信号量机制:struct sempahore是其结构,定义如下struct semaphore { atomic_t count;//资源数目 int sleepers;//等待进程数目 wait_queue_head_t wait;//等待队列#if WAITQUEUE_DEBUG long __magic;#endif};down操作成功(减后结果非负数)那就在标号1处结束down操作,转到临... 阅读全文

posted @ 2016-10-27 10:54 笨拙的菜鸟 阅读(530) 评论(0) 推荐(0) 编辑

linux内核之情景分析mmap操作

摘要: 进程可以通过mmap把一个已打开文件映射到用户空间.mmap(void*start,size_t length,int prot,int flags,int fd,off_t offset)start表示用户空间映射的起始地址,offset文件的起始length长度.asmlinkage long sys_mmap2(unsigned long addr, unsigned long len, u... 阅读全文

posted @ 2016-10-27 10:53 笨拙的菜鸟 阅读(1966) 评论(0) 推荐(0) 编辑

linux内核情景分析之匿名管道

摘要: 管道的机制由pipe()创建,由pipe()所建立的管道两端都在同一进程.所以必须在fork的配合下,才可以在具有亲缘关系的进程通信/* * sys_pipe() is the normal C calling standard for creating * a pipe. It's not the way Unix traditionally does this, though. */asmli... 阅读全文

posted @ 2016-10-27 10:52 笨拙的菜鸟 阅读(485) 评论(0) 推荐(0) 编辑

linux内核情景分析之命名管道

摘要: 管道是一种"无名","无形文件,只可以近亲进程使用,不可以再任意两个进程通信使用,所以只能实现"有名","有形"的文件来实现就可以克服其缺点,这里的有名:一个文件应该有文件名,使得任何进程可以通过文件名或者路径找到该文件,有形指的是文件的inode应该存在与磁盘或者其他文件熊截止上.使得任何进程可以再任何时间都可以建立联系.命名管道的创建用mknod,当然也可以使用mknod函数创建命名管道.建立... 阅读全文

posted @ 2016-10-27 10:51 笨拙的菜鸟 阅读(644) 评论(0) 推荐(0) 编辑

linux内核情景分析之信号实现

摘要: 信号在进程间通信是异步的,每个进程的task_struct结构有一个sig指针,指向一个signal_struct结构定义如下struct signal_struct { atomic_t count; struct k_sigaction action[_NSIG];//类似一个信号向量表,每个元素就是一个函数指针 spinlock_t siglock;};struct k_sigactio... 阅读全文

posted @ 2016-10-27 10:50 笨拙的菜鸟 阅读(958) 评论(0) 推荐(0) 编辑

Linux内核情景分析之消息队列

摘要: 早期的Unix通信只有管道与信号,管道的缺点:所载送的信息是无格式的字节流,不知道分界线在哪,也没通信规范,另外缺乏控制手段,比如保温优先级,管道机制的大小只有1页,管道很容易写满而读取没有及时,发送者只能休眠,强化了管道机制同步要求.另外管道机制开销不少,尤其是当发送信息量很少时,平均每个字节所耗费的代价非常高Linux内核为系统IPC提供了一个统一的系统调用ipc()int ipc(unsig... 阅读全文

posted @ 2016-10-27 10:49 笨拙的菜鸟 阅读(606) 评论(0) 推荐(1) 编辑

2016年10月14日

linux2.4内核调度

摘要: 进程调度需要兼顾3种进程:交互进程,批处理进程,实时进程,在设计一个进程调度机制时需要考虑具体问题 (1)调度时机? 答:进程在用户空间可以pause()或者让内核设置进程为睡眠状态,以此调度,调度还可以强制性的发生在从系统调用返回前夕,以此每次从中断或异常处理返回到用户空间前夕(用户空间表示,只有 阅读全文

posted @ 2016-10-14 02:46 笨拙的菜鸟 阅读(1063) 评论(0) 推荐(1) 编辑

导航