本博客为6.S081课程的第三个Lab:page tables,这次Lab主要是调试Xv6中页表相关的部分,共设计了三个题。Xv6是三级页表设计,通过这次实验能够清楚的知道页表如何将虚拟地址和物理地址实现映射。
6.S081-Lab 2 system calls
本博客为6.S081课程的第二个Lab:system calls,内容为实现两个操作系统的系统调用:trace和sysinfo,通过这次Lab熟悉 xv6 操作系统中系统调用的入口、流程。
6.S081-Lab 1 Xv6 and Unix utilities
6.S081是MIT的一门操作系统课,这门课程使用一个简化的 Unix-like 系统 xv6 为例进行讲解,该课程主要作业是一系列的Lab,本篇博客记录第一个 Lab:Xv6 and Unix utilities。这次 Lab的主要内容是编写一些简化版本的小程序,这些小程序通过调用内核提供的系统调用来完成功能。
程序链接过程详解
链接可以将多个目标文件合并为一个可执行文件,这使得分离编译成为了可能。通常一个项目由多个文件组成,这些文件可以分别编译为目标文件(Windows下为.obj,Unix下一般命名为.o文件),链接器通过符号识别和重定位等方法解决不同目标文件中的符号引用问题,最终生成可执行文件。链接分为静态链接和动态链接,本文将分别介绍其原理。文中大量图和例子来源于参考文献。
机器级解释函数调用过程
最近想抽出时间好好读一读CSAPP,这本书很早就买了,但一直没有时间去通读一遍。这本书主要是讲计算机系统中的一些底层知识,内容涉及比较广,包括了计算机组成、操作系统、程序编译、链接等很多内容,和之前看过的很多书有重合部分。本篇文章主要介绍如何从汇编码(机器级)的角度去看待程序的执行,尤其是介绍函数调用过程运行时栈发生的变化,本文的大部分内容,包括示例来自于书中的第3章。
web项目:博客相册分享网站
近期一直在忙一个web项目,因为课题组购买了一个3年的云服务器,之前用做内网透传和 git 服务器。为了将这个服务器利用起来,我构思了一个用于发布博客和相册的分享网站,前端使用vue + element ui进行设计,后端使用Spring boot + Mybatis进行数据库的访问。也算是对这段时间学习web前后端的一个总结。本篇博客对项目中一些关键的设计进行介绍,项目的代码链接在文章末尾给出。
算法(一)
程序 = 数据结构 + 算法。这是一篇整理算法知识的博客,内容包括二分查找、常见排序算法、深度优先搜索算法、广度优先搜索算法以及回溯。对于算法的理论讲解并不多,这里借助LeetCode上相关题目来演示算法。
卡尔曼滤波理论推导
这几天学习了卡尔曼滤波器(Kalman Filter)相关的理论知识,并发现了一个非常仔细的推导过程,是在b站上发现的一个搞控制的博士DR_CAN(文内有链接),看完他的卡尔曼滤波器相关的视频,加深了我对理论的理解,这里将视频中的推导过程加以梳理,以便日后查看。
相机标定和相关坐标转换
最近做一门课的课程作业,目标是实现目标的识别和定位,并控制机械臂对目标进行抓取,老师提供的是淘宝买到的学习套件。在实现目标识别功能的过程中,涉及到对相机进行标定、并将像素坐标系下的物体坐标转换为世界坐标系下的坐标。对于这部分内容,我参考了很多网上的文章,这里对整个学习过程进行一个梳理记录。
Servlet系列(四):过滤器和监听器
本文简要介绍了Servlet中的过滤器和监听器的概念,并对涉及到的相关接口进行了介绍。