XV6操作系统是MIT 6.828课程中使用的教学操作系统,是在现代硬件上对Unix V6系统的重写.XV6总共只有一万多行,非常适合初学者用于学习和实践操作系统相关知识. MIT 6.828的课程网站是https://pdos.csail.mit.edu/6.828/.XV6操作系统有官方文档,英文版在前面的网站可以下载,中文版翻译参见https://th0ar.gitbooks.io/xv6-chinese/content/. 此部分内容另有PPT 前置知识 在阅读XV6操作系统代码前,需要…
本文将会详细介绍Xv6操作系统中虚拟内存的初始化过程. 基本概念 32位X86体系结构采用二级页表来管理虚拟内存.之所以使用二级页表, 是为了节省页表所占用的内存,因为没有内存映射的二级页表可以不用分配地址来存储.在这个二级页表结构中,每个页的大小为4KB,每个页表的大小也为4KB,每个页表项的大小为4字节,一个页表包含1024个页表项.一级页表表项存储的是二级页表的地址,二级页表表项存储的是对应的物理地址.虚拟地址和物理地址的最后12位总是相同,因此页表表项中的这12位可以被用作标记其他信息.…
1. 进程的基本概念 从抽象的意义来说,进程是指一个正在运行的程序的实例,而线程是一个CPU指令执行流的最小单位.进程是操作系统资源分配的最小单位,线程是操作系统中调度的最小单位.从实现的角度上讲,XV6系统中只实现了进程, 并没有提供对线程的额外支持,一个用户进程永远只会有一个用户可见的执行流. 2. 进程管理的数据结构 根据[1],进程管理的数据结构被叫做进程控制块(Process Control Block, PCB).一个进程的PCB必须存储以下两类信息: 操作系统管理运行的进程所需要信…
锁是操作系统中实现进程同步的重要机制. 基本概念 临界区(Critical Section)是指对共享数据进行访问与操作的代码区域.所谓共享数据,就是可能有多个代码执行流并发地执行,并在执行中可能会同时访问的数据. 同步(Synchronization)是指让两个或多个进程/线程能够按照程序员期望的方式来协调执行的顺序.比如,让A进程必须完成某个操作后,B进程才能执行.互斥(Mutual Exclusion)则是指让多个线程不能够同时访问某些数据,必须要一个进程访问完后,另一个进程才能访问. 当…
Unix文件系统 当今的Unix文件系统(Unix File System, UFS)起源于Berkeley Fast File System.和所有的文件系统一样,Unix文件系统是以块(Block)为单位对磁盘进行读写的.一般而言,一个块的大小为512Byte或者4KB.文件系统的所有数据结构都以块为单位存储在硬盘上,一些典型的数据块包括:superblock, inode, data block, directory block and indirection block. Superbl…
pts_i和pts_j:具体指什么含义?(分别为第l个路标点在第i, j个相机归一化相机坐标系中的观察到的坐标,P¯¯¯cil \bar{P}^{c_i}_l Pˉ lc i​ ​ 和 P¯¯¯cjl \bar{P}^{c_j}_l Pˉ lc j​ ​ ):tangent_base:正切平面上的任意两个正交基(在构造函数中通过计算?被赋值):静态数据成员sqrt_info和sum_t:在何时被赋值的呢? class ProjectionFactor : public ceres::SizedC…
[原]AFNetworking源码阅读(四) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇还遗留了很多问题,包括AFURLSessionManagerTaskDelegate类所实现的NSURLSession相关的代理方法,甚至连dataTask.uploadTask.downloadTask这几个基本概念也没说.这一篇就是为了集中消灭这些遗留问题. 2. AFURLSessionManagerTaskDelegate的代理方法 此处实现的仍然是NSURLS…
[原]SDWebImage源码阅读(四) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 SDWebImage中主要实现了NSURLConnectionDataDelegate的以下方法: - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response; - (void)connection:(NSURLConnection *)connecti…
Understand 2.0是一款源代码阅读分析软件,功能强大.试用过一段时间后,感觉相当不错,确实可以大大提高代码阅读效率.由于Understand功能十分强大,本文不可能详尽地介绍它的所有功能,所以只列举本人认为比较重要或有特色的功能,以做抛砖引玉之举. Understand 2.0可以从http://www.scitools.com/下载到,安装后可以试用15天. 使用Understand阅读代码前,要先创建一个Project,然后把所有的源代码文件加入到这个Project里.这里我创建了…
Linux协议栈代码阅读笔记(二)网络接口的配置 (基于linux-2.6.11) (一)用户态通过C库函数ioctl进行网络接口的配置 例如,知名的ifconfig程序,就是通过C库函数sys_ioctl实现网络接口的配置的. 具体方法大致如下,即建立一个socket,得到一个fd,然后在此fd上执行ioctl即可完成各种操作(例如,查询/配置mac.ip.mtu,启动/停止网络接口). int fd = socket(AF_INET, SOCK_DGRAM, 0); ioctl(fd, SI…
Linux协议栈代码阅读笔记(一) (基于linux-2.6.21.7) (一)用户态通过诸如下面的C库函数访问协议栈服务 int socket(int domain, int type, int protocol); int bind(int sockfd, const struct sockaddr *addr,  socklen_t addrlen); int connect(int sockfd, const struct sockaddr *addr,  socklen_t addrl…
引言 Bleve是Golang实现的一个全文检索库,类似Lucene之于Java.在这里通过阅读其代码,来学习如何使用及定制检索功能.也是为了通过阅读代码,学习在具体环境下Golang的一些使用方式.代码的路径在github上https://github.com/blevesearch/bleve. Index Mapping是bleve的一个功能特性,用来控制每个类型的文档,文档内的每个字段,具体应该如何被分析.索引.存储,这部分与Lucence的设计思路相同. 1 IndexMapping的…
Redis源码阅读(四)集群-请求分配 集群搭建好之后,用户发送的命令请求可以被分配到不同的节点去处理.那Redis对命令请求分配的依据是什么?如果节点数量有变动,命令又是如何重新分配的,重分配的过程是否会阻塞对外提供的服务?接下来会从这两个问题入手,分析Redis3.0的源码实现. 1. 分配依据——槽 Redis将每个客户端的请求命令通过哈希的方式映射到槽上,映射方法就是对该客户端请求中的键值求CRC16校验值,求得的值再和16383(0x3FFF)进行与操作,得到的结果即为槽值:Redis…
4.2.PowerShell 为了保障木马样本的体积很小利于传播.攻击者会借助宏->WMI->Powershell的方式下载可执行文件恶意代码.最近也经常会遇见利用Powershell通过Windows自带的组件执行系统命令绕过UAC下载文件手法的文章. UAC:用户帐户控制(User Account Control,简写作UAC)是微软公司在其Windows Vista及更高版本操作系统中采用的一种控制机制.其原理是通知用户是否对应用程序使用硬盘驱动器和系统文件授权,以达到帮助阻止恶意程序(…
1.Office Macor MS office宏的编程语言是Visual Basic For Applications(VBA). 微软在1994年发行的Excel5.0版本中,即具备了VBA的宏功能.开发目的是为了在其桌面应用程序中执行通用的自动化任务,用于扩展Windows的应用程序功能.在分析带有宏病毒的样本前,我们需要对VBA有所了解.才能更顺畅地了解病毒发展中的手段和变化. 2.VBA代码阅读扫盲 (1) 环境介绍 打开Excel的开发者工具 当用户希望使用宏功能时,可在"开发工具&…
Linux协议栈代码阅读笔记(二)网络接口的配置 (基于linux-2.6.11) (一)用户态通过C库函数ioctl进行网络接口的配置 例如,知名的ifconfig程序,就是通过C库函数sys_ioctl实现网络接口的配置的. 具体方法大致如下,即建立一个socket,得到一个fd,然后在此fd上执行ioctl即可完成各种操作(例如,查询/配置mac.ip.mtu,启动/停止网络接口). int fd = socket(AF_INET, SOCK_DGRAM, 0); ioctl(fd, SI…
Android studio 使用心得(四)—android studio 多渠道打包 这篇文章讲了一种打包方式.是直接在android studio 里面可视化操作,结合配置文件.我个人觉得严格上来讲是不完全正确的操作,因为配置文件里面的签名文件根本没有用到.但是,打出来的包绝对没问题的.这篇主要是介绍直接在dos命令里面使用gradle命令打包.两行命令,简单gradle clean ,gradle build. 1,配置文件还是和之前的一样,我才贴一次代码 ? 1 2 3 4 5 6 7…
操作系统接口 操作系统的工作是(1)将计算机的资源在多个程序间共享,并且给程序提供一系列比硬件本身更有用的服务.(2)管理并抽象底层硬件,举例来说,一个文字处理软件(比如 word)不用去关心自己使用的是何种硬盘.(3)多路复用硬件,使得多个程序可以(至少看起来是)同时运行的.(4)最后,给程序间提供一种受控的交互方式,使得程序之间可以共享数据.共同工作. 操作系统通过接口向用户程序提供服务.设计一个好的接口实际上是很难的.一方面我们希望接口设计得简单和精准,使其易于正确地实现:另一方面,我们可…
XGBoost学习: 集成学习将多个弱学习器结合起来,优势互补,可以达到强学习器的效果.要想得到最好的集成效果,这些弱学习器应当"好而不同". 根据个体学习器的生成方法,集成学习方法可以分为两大类,序列化方法,并行化方法.序列化方法的代表就是Boosting方法,其中XGBoost和lightGBN都属于此类. Boosting的方法是先从初始训练集训练出一个基学习器.然后再对训练样本的分布做一些调整,使得前一个学习器分类错误的样本得到更多的关注,再以此训练下一个基学习器. 依次类推,…
现在应该讲主控制类了,为了不把系统弄得太复杂,所以就用一个类作为主要控制类(服务类),作为前端.后端.业务逻辑的控制类. WorkflowService类的类图如下: 该类的构造函数: public WorkflowService(IWorkflowDB workflowDb, IWorkflowMethods workflowMethods) { _iWorkflowDb = workflowDb; _iWorkflowMethods = workflowMethods; } 通过简单工厂方法…
我在Android上的代码阅读器用的是 https://github.com/zerob13/CoderBrowserHD 改造的版本,改造后的版本我放在 https://github.com/ghj1976/CoderBrowserHD 了.   主要的改造如下: 升级项目成 Android Studio 的项目 git 下载 https://github.com/zerob13/CoderBrowserHD 后的项目改造步骤如下: 1.Clone 到自己本地 2.Import Project…
Scitools出品的Understand 2.0.用了很多年了,比Source Insight强大很多.以前的名字叫Understand for C/C++,Understand for Java,Understand for Ada,最近这几年合并成了一个产品. 最值得一提的是各种关系图的绘制,以及在这些图上的交互操作:Declaration Graphs / Hierarchy Graphs / Control Flow Graphs / Dependency Graphs / UML C…
初始能力 让阅读思路保持清晰连贯,主力关注在流程架构和逻辑实现上,不被语法.技巧和业务流程等频繁地阻碍和打断. 建议基本满足以下条件,再开始进行代码阅读: 具备一定的语言基础:熟悉基础语法,常用的函数.库等: 了解业务背景和逻辑: 了解设计模式.熟悉编程和构建工具的使用.了解代码风格: 工具使用 Source Insight - 具有强劲的代码浏览和分析功能 Doxygen - 项目文档工具 grep命令 - 用于全局搜索 利用代码结构分析功能或插件生成UML图 Python Call Grap…
  MediaInfo是一个用来分析媒体文件的开源工具. 支持的文件非常全面,基本上支持所有的媒体文件. 最近是在做HEVC开发,所以比较关注MediaInfo中关于HEVC的分析与处理. 从MeidaInfo的官网上下载下来的代码比较庞大,工程比较多,但是代码阅读的一个关键在于,先要抓住主干,然后再不断的深入.先找到自己关注的地方,然后分析,之后再进行分析一些相关的代码. 此处下载的是mediainfo 0.7.72版本. 从下图可以看出,mediaInfo中包括了诸多的工程.   其中,Me…
1 初始能力 让阅读思路清晰连贯,保持在程序的流程架构和逻辑实现上,不被语法.编程技巧和业务流程等频繁地阻碍和打断. 语言基础:熟悉基础语法,常用的函数.库.编程技巧等: 了解设计模式.构建工具.代码风格: 了解业务背景和逻辑: 即便此时,还不具备完全理解代码的能力,但通过接触这些代码,至少可以熟悉项目的样貌. 2 工具使用 Source Insight - 具有强劲的代码浏览和分析功能 Doxygen - 项目文档工具 grep命令 - 用于全局搜索 利用代码结构分析功能或插件生成UML图 P…
问题:分析下面代码 cities['_find'] = find_city city_found = cities['_find'](cities, state) 分析过程: 一个函数也可以作为一个变量,def find_city比如这一句创建了一个你可以在任何地方都能使用的变量.在这段代码里,我们首先把函数find_city放到叫做cities的字典中,并将其标记为'_find'. 第二行代码可以分解成如下步骤: 1. Python 看到city_found = 于是知道了需要创建一个变量.…
目录 Python实现C代码统计工具(四) 标签: Python 计时 持久化 声明 运行测试环境 一. 自定义计时函数 1.1 整个程序计时 1.2 代码片段计时 1.3 单条语句计时 二. 性能优化 Python实现C代码统计工具(四) 标签: Python 计时 持久化 声明 本文介绍若干种有别于cProfile/profile模块的Python程序计时方法,并对<Python实现C代码统计工具(三)>中的C代码统计工具进行性能优化.本文所述的方法也适用于其他Python脚本. 运行测试…
看图写代码 阅读<<Audio/Video Connectivity Solutions for Virtex-II Pro and Virtex-4 FPGAs >> 1.SDI Block Diagram and SD-SDI Section Chapters 2.XYZ Word Format for the 4:4:4:4 TRS Symbol 端口定义: module trs_detect ( // inputs clk, // clock input ce, // cl…
DIOCP组件(Delphi IOCP)代码阅读之ADO内存表 代码中有 class procedure TADOTools.loadFromStream(pvDataSet: TCustomADODataSet; pvStream: TStream); var AR:_Recordset; begin AR:=_Recordset(CoRecordset.Create); pvStream.Position:=0; AR.Open(TStreamAdapter.Create(pvStream)…
# train_net.py#!/usr/bin/env python # -------------------------------------------------------- # Fast R-CNN # Copyright (c) 2015 Microsoft # Licensed under The MIT License [see LICENSE for details] # Written by Ross Girshick # -----------------------…