随笔分类 - 操作系统
摘要:线程和进程 linux中,进程和线程都用task_struct结构体表示,只是进程和线程的区别在于task_struct中的mm和files等资源是否共享。 记录层面 task_struct中有两个字段记录的是编号 pid_t pid; /* process id */ task编号,唯一标识一个t
阅读全文
摘要:linux虚拟内存系统 进程的虚拟内存 用户区分段:代码段、数据段、堆、共享库、栈 内核区:存放进程信息,PID\程序计数器、打开文件列表、task和mm(描述虚拟内存)结构等 Linux加载进程时(exec系列系统调用)会为该地址空间每个段分配VMA,VMA数据结构(vm_area_struct)
阅读全文
摘要:协程杂记 协程是什么 协程是一种协作式多任务模型,不同于线程的抢占式多任务模型。协程是由程序员自己控制的,可以在任意时刻挂起或者恢复一个协程,更适合于用来实现彼此熟悉的程序组件。 在通常使用线程的情景中,负责处理不同任务的线程之间存在着数据竞争,使用加锁可以解决问题,但其实并不符合我们的本意。以生产
阅读全文
摘要:锁-条件变量-信号量 用一个例子引入,用于输出嵌套深度不超过n的括号序列。 void Tproduce() { while (1) { mutex_lock(&lk); if (!CAN_PRODUCE) { cond_wait(&cv, &lk); } printf("("); count++;
阅读全文
摘要:以为会狠狠考概念,没想到没考啥概念,计算也比较简单! introduction 操作系统是一组控制和管理计算机系统中的各种软硬件资源,合理地组织计算机系统的工作流程,方便用户使用的程序的集合 操作系统的目标和作用 convenience方便性:方便用户使用计算机系统; efficiency有效性:提
阅读全文
摘要:匿名管道常常用来实现父子进程的通信。通过pipe函数创建两个文件描述符,分别指向管道的读端和写端。 从内核对于共享文件的实现来理解管道 描述符表。每个进程都有它独立的描述符表,它的表项是由进程打开的文件描述符来索引的。每个打开的描述符表项指向文件表中的一个表项。 文件表。所有的进程共享这张表。每个文
阅读全文
摘要:读者-写者问题 读者写者问题是并发和同步领域的经典问题,然而各大教科书和网络资源基本都只讲解了其中的一种——读者优先的情况,对其余情况涉及很少。本着深入研究问题的态度,在此对各种情况讨论并给出代码,仅供参考。以下说明中为简化把信号量都看做锁。 读者优先 这是os教科书里基本都会给出的情况,即 写者必
阅读全文