摘要: 1. docker的安装 2. 简单测试 sudo docker run ubuntu:15.10 /bin/echo "Hello world" ubuntu:15.10 使用做为容器的镜像,如果本地不存在会从docker hub上下载 /bin/echo "Hello world" 启动容器后执 阅读全文
posted @ 2019-11-15 23:32 方田 阅读(235) 评论(0) 推荐(0) 编辑
摘要: 汇编文件 go tool compile 可以看帮助 -N 关闭优化 阅读全文
posted @ 2019-03-28 10:15 方田 阅读(189) 评论(0) 推荐(0) 编辑
摘要: 再go语言中没有引用传递,所有都是按照值拷贝的方式传递的。 数组:实际就是堆栈上的一段连续内存,和c类似。(可以更加反编译代码推断 go tool compile -S main.go > main.S) 但是再作为参数传递的时候,时当作一个对象,发生拷贝。通过汇报可以看到DUFFCOPY拷贝(ht 阅读全文
posted @ 2019-03-23 16:46 方田 阅读(907) 评论(0) 推荐(0) 编辑
摘要: 基于版本 104 可以直接在lua访问c#函数原理: CS 是一个table,设置了一个__index函数,如果访问不存在的成员的时候,会走__index函数,调用import_type从C#中找到具体函数设置到CS中。以便下一次访问的时候直接使用 xlua在生产wrap时,会生成一个partial 阅读全文
posted @ 2018-09-26 15:39 方田 阅读(5899) 评论(0) 推荐(0) 编辑
摘要: 一. 配置环境变量 PATH=%PATH%;%GOROOT%/bin GOROOT=go的安装目录 GOPATH=工作空间目录(可以配置多个路径,当go需要使用GOPATH的时候会从前到后多个路径中查找) 二. 工作空间 工作空间使我们工作的目录,我们必须按照指定的方式来组织代码。在工作目录下包含三 阅读全文
posted @ 2018-08-30 14:31 方田 阅读(241) 评论(0) 推荐(0) 编辑
摘要: bootloader 1. bootasm.S : start32 2. bootmain.c : bootmain kernel 3. main.c : main 4. proc.c : userinit 创建第一个用户进程 initcode 5. main.c : mpmain 调用schedu 阅读全文
posted @ 2018-07-26 16:33 方田 阅读(601) 评论(0) 推荐(0) 编辑
摘要: 在xv6 中锁对象是 spinlock,spinlock中的locked为1的时候表示被占用,为0的时候锁空闲。 使用 acquire获取锁 该函数中通过xchg原子性交换locked和1,并返回locked的原来的值。当返回值为1时,说明其他线程占用了该锁,继续循环等待;当返回值为0时,说明其他地 阅读全文
posted @ 2018-07-26 14:48 方田 阅读(1127) 评论(0) 推荐(0) 编辑
摘要: 1. 系统调用的实现 开发程序需所有的接口在user.h中,包含两部分system call和ulib user.h中的系统接口函数在usys.S中通过汇编实现 把系统调用ID放入eax中,使用int T_SYSCALL中断 2. int 指令 int n 指令是调用n号中断的中断过程。最终效果和函 阅读全文
posted @ 2018-07-24 17:45 方田 阅读(968) 评论(0) 推荐(0) 编辑
摘要: 1. xv6.img的构建 在makefile中 使用bootasm.S和bootmain.c构建bootblock.o,使用工具objcopy把bootblock.o的.text段(该段包含程序的可执行指令)拷贝出来生成bootblock 使用perl脚本sign.pl把bootblock设置成5 阅读全文
posted @ 2018-07-20 18:30 方田 阅读(1394) 评论(0) 推荐(0) 编辑
摘要: 我们使用Qemu在Ubuntu下运行 1. 安装Qemu 执行 qemu-system-i386 ,如果弹出Qemu界面说明安装成功了 2. 编译xv6 下载代码(一定要使用git下载,不要自己手动去下载,否则可能下载的版本不对,编译不过) 编译 3. 运行 make qemu 阅读全文
posted @ 2018-07-19 17:46 方田 阅读(1046) 评论(0) 推荐(0) 编辑