XV6源代码阅读-同步机制】的更多相关文章

Exercise1 源代码阅读 锁部分:spinlock.h/spinlock.c以及相关其他文件代码 // Mutual exclusion lock. struct spinlock { uint locked; // 0未被占用, 1已被占用 // For debugging: char *name; // Name of lock. struct cpu *cpu; // The cpu holding the lock. uint pcs[10]; // The call stack…
Exercise1 源代码阅读 文件系统部分 buf.h fcntl.h stat.h fs.h file.h ide.c bio.c log.c fs.c file.c sysfile.c exec.c 1.buf.h:对xv6中磁盘块数据结构进行定义,块大小为512字节. // xv6中磁盘块数据结构,块大小512字节 struct buf { int flags; // DIRTY, VALID uint dev; uint sector; // 对应扇区 struct buf *prev…
Exercise1 源代码阅读 1.内存管理部分: kalloc.c vm.c 以及相关其他文件代码 kalloc.c:char * kalloc(void)负责在需要的时候为用户空间.内核栈.页表页以及缓冲区分配物理内存,将物理地址转为虚拟地址返回,物理页大小为4k.void kfree(char * v)接收一个虚拟地址,找对对应的物理地址进行释放.xv6使用空闲内存的前部分作为指针域来指向下一页空闲内存,物理内存管理是以页(4K)为单位进行分配的.物理内存空间上空闲的每一页,都有一个指针域…
Exercise1 源代码阅读 1.启动部分: bootasm.S bootmain.c 和xv6初始化模块:main.c bootasm.S 由16位和32位汇编混合编写成的XV6引导加载器.bootasm.S内的汇编代码会调用bootmain.c中的void bootmain(void):main.c主函数内部初始化各模块: 当x86 PC启动时,它执行的是一个叫BIOS的程序.BIOS存放在非易失存储器中,BIOS的作用是在启动时进行硬件的准备工作,接着把控制权交给操作系统.具体来说,BI…
Exercise1 源代码阅读 1.基本头文件:types.h param.h memlayout.h defs.h x86.h asm.h mmu.h elf.h types.h:仅仅是定义uint, ushort, uchar pde_t别名: typedef unsigned int uint; typedef unsigned short ushort; typedef unsigned char uchar; typedef uint pde_t; parame.h 利用宏定义了进程最…
Mongodb源代码阅读笔记:Journal机制 Mongodb源代码阅读笔记:Journal机制 涉及的文件 一些说明 PREPLOGBUFFER WRITETOJOURNAL WRITETODATAFILES REMAPPRIVATEVIEW 涉及的文件 mongoDB中和持久性相关的文件只要有以下几个: dur.h: dur.cpp,dur_preplogbuffer.cpp,dur_writetodatafiles.cpp ,dur_commitjob.h: dur_commitjob.…
Nginx源代码分析-进程间通信机制 从nginx的进程模型能够知道.master进程和worker进程须要通信,nginx中通信的方式有套接字.共享内存.信号.对于master进程,从外部接受信号,master进程主要就是监控.接受外部信号,将有必要的信号传递给worker进程,master进程大部分时间都是堵塞在sigsuspend()函数调用上.Worker进程屏蔽了全部的外部信号,那么Master进程就通过套接字和worker进程通信,worker进程改动全局变量,使得worker进程接…
innodb是一个多线程并发的存储引擎,内部的读写都是用多线程来实现的,所以innodb内部实现了一个比較高效的并发同步机制. innodb并没有直接使用系统提供的锁(latch)同步结构,而是对其进行自己的封装和实现优化.可是也兼容系统的锁.我们先看一段innodb内部的凝视(MySQL-3.23): Semaphore operations in operating systems are slow: Solaris on a 1993 Sparc takes 3 microseconds…
摘要:Chromium于GPU多个流程架构的同意GPUclient这将是这次访问的同时GPU维修,和GPUclient这之间可能存在数据依赖性.因此必须提供一个同步机制,以确保GPU订购业务.本文讨论了下一个多进程架构GPUclient之间的同步,而同步点(SyncPoint). GPU进程架构等基本概念 我们知道,Chromium是一个多进程架构的软件系统.出于安全和稳定性方面的考虑,Chromium有个专门的进程(或者线程)和GPU设备进行交互,运行GL操作,也就是说,不论什么一条GL命令都…
https://casatwy.com/pthreadde-ge-chong-tong-bu-ji-zhi.html pthread是POSIX标准的多线程库,UNIX.Linux上广泛使用,windows上也有对应的实现,所有的函数都是pthread打头,也就一百多个函数,不是很复杂.然而多线程编程被普遍认为复杂,主要是因为多线程给程序引入了一定的不可预知性,要控制这些不可预知性,就需要使用各种锁各种同步机制,不同的情况就应该使用不同的锁不同的机制.什么事情一旦放到多线程环境,要考虑的问题立刻…