自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(66)
  • 收藏
  • 关注

原创 MIT 6.S081---Lab: file system

【代码】MIT 6.S081---Lab: file system。

2024-03-20 12:09:32 289

原创 MIT 6.S081---Lab: locks

【代码】MIT 6.S081---Lab: locks。

2024-03-12 11:57:34 542

原创 操作系统导论-课后作业-ch22

此功能能够跟踪到内存的引用记录,要使用必须要缓存住每个虚拟内存页对应的虚拟页码。总的来说测试结果有随机性,个人认为理论上LRU的表现在局部序列上会好一些。当缓存大小>=可能被访问到的页数的时候,可大幅提升性能,达到OPT。LRU和FIFO已经接近OPT了。

2024-03-07 13:38:35 396

原创 MIT 6.S081---Lab: Multithreading

修改uthread.c,在thread中新增context字段:修改uthread.c,在thread_create函数中新增以下逻辑:修改uthread.c中的thread_switch函数定义:修改uthread.c中的thread_schedule函数实现,新增线程切换逻辑:修改uthread_switch.S:修改uthread.c,新增头文件引用:测试结果如下:修改ph.c,修改entry结构体,新增lock字段:修改ph.c,修改main函数,新增初始化逻辑:修改ph.c,

2024-03-07 11:16:59 156

原创 操作系统导论-课后作业-ch20

页的大小为32字节,虚拟地址空间包含1024页而真实的物理空间只包含128个页。虚拟地址和物理地址都是15位,虚拟地址有5位代表offset而10位表示VPN(用于索引),而物理地址有7位从PFN中获得,而5位表示偏移,索引到字节。二级页表三级页表都只要一个寄存器,保存页的根目录表的地址即可,然后根据这个地址逐级索引下去。如果经常访问页表,将页表的内容保存到缓存中可以命中,从而导致快速访问。

2024-02-22 16:10:11 346

原创 操作系统导论-课后作业-ch19

本书在第6章中有过介绍,gettimeofday函数最多精确到us,并且大致精确(并不完全精确),需要多迭代几次减少误差,循环次数太多也会导致结束时间小于开始时间(即回滚)的现象,需要权衡。

2024-02-21 15:16:39 610

原创 MIT 6.S081---Lab: Copy-on-Write Fork for xv6

Implement copy-on write(hard)从下图可见,xv6的pte中RSW都是可以被软件使用的未定义位,此处将pte中的第9位标记为PTE_COW位。修改kernel/riscv.h:修改kernel/vm.c,新增refCount代表物理页面的引用次数,根据(PHYSTOP-KERNBASE)/ PGSIZE得32768:修改kernel/vm.c中的uvmcopy():修改kernel/vm.c中的mmappages(),当页表绑定物理页面时增加引用计数:修改k

2024-02-21 10:51:32 261

原创 MIT 6.S081---Lab: xv6 lazy page allocation

前面的解决方法存在诸多不足,在这里需要修改;

2024-02-18 11:49:32 193

原创 操作系统真象还原---系列笔记总结

MyTinyOS—微型操作系统 独立开发应用技术:汇编语言、C语言、gdb、Makefile主要工作:1. 搭建VirtualBox + CentOS + bochs模拟仿真环境,并在实模式下实现MBR、bootloader;2. 构建GDT,开启A20总线,进入保护模式,启用内存分页机制,实现特权级并载入内核;3. 实现中断处理机制,完善内存管理系统,逐步实现内核线程、用户进程,锁、输入输出等机制;4. 进一步完善内核,实现系统调用,创建文件系统、简单的系统交互等;

2024-02-02 11:39:45 443

原创 操作系统导论-课后作业-ch18

随着页大小的增长,线性页面大小逐渐减少。随着地址空间的增长,线性页表也逐渐增大。

2024-01-30 13:22:38 370

原创 操作系统导论-课后作业-ch17

运用SIZESORT-和FIRST的策略等同于运用WORST策略,并且查找速度比WORST还要快;运用SIZESORT+和FIRST的策略等同于运用BEST策略,并且查找速度比BEST还要快;随着已分配百分比的增大,alloc操作的比例越大。随着时间的推移列表越来越长并且碎片越来越多。碎片依然存在,但是它们之间可以合并。使用首次匹配,查找的速度变快了。

2024-01-30 11:21:37 391

原创 操作系统导论-课后作业-ch16

段0的最高合法虚拟地址为len0,而段1的最低合法虚拟地址为max-len1,在整个地址空间里面,最低的非法虚拟地址为len0+1,最高的是max-len1-1;也就是说上题段0最高合法虚拟地址为19,而段1的最低合法虚拟地址为108。具体规则就是segment0是从虚拟地址0往上寻址的,而segment1是从虚拟地址的最大值往下寻址的。20个虚拟地址空间,有2个有效地址,故大约90%的随机生成的虚拟地址是有效的。

2024-01-26 14:16:05 187

原创 MIT 6.S081---Lab: traps

函数f的汇编代码在上图的第26~35行;而函数g的汇编代码位于第13~22行,经过对比代码一模一样,其原因是函数f在调用函数g时编译器采用了inline的方式直接将g函数内联展开了,节省了一次函数调用的时间。大端序的话地址需要以字节为一组进行翻转,即改为0x726c6400,而57616不用改,因为编译器会让它以正确的形式展示出来。可以从代码第45~47行代码可以看出,main函数调用printf系统调用时传入的参数是通过a0 ~ a2 来传入的。可见y可能是一个随机的值,一个没有被初始化过的未定义的值。

2024-01-25 19:53:19 1138

原创 RISC-V常用汇编指令

RISC-V寄存器表:

2024-01-25 10:10:47 644

原创 操作系统导论-课后作业-ch9

如果使用步长调度策略的话,在量子规模较大时也能保持较稳定的不公平性,但正如文中所说,如果在任务执行时新来一个任务将会独占cpu,显然也有其局限性。量子规模越大,决策次数减少,不公平的可能也就越大。类似书中,设置不同的量子规模为横坐标,不公平性也即两个工作完成时间为纵坐标多次实验即可。拥有100张彩票的任务0先执行完,当然工作1完成前工作0也是有一定的概率执行的。工作0在192时结束,工作1在200时结束,不公平性取决于彩票的数量分配。可见seed不同,产生的任务长度的tickets的分配数额都不一样了。

2024-01-24 10:12:39 350

原创 操作系统导论-课后作业-ch15

使用以下标志运行:-s 1 -n 10 -l 100。可见,原文翻译并没有任何问题,说的意思是limit最大值是多少以至于可以将该地址空间仍然放在物理内存中。当VA<Limit && Limit+Base<物理内存大小时,随机生成的虚拟地址值有效。可见基址为2201,物理内存大小为16k,故界限的最大值为16k-2201=14183。随着Limit值从0到最大地址空间时,其随机生成的虚拟地址中有效部分应该越大。此处可见,-a和-p设置的越大,随机数产生的虚拟地址一般也会随着增大。

2024-01-24 10:05:31 423

原创 操作系统导论-课后作业-ch14

执行结果如下:可见,没有任何报错,执行完成。

2024-01-23 12:10:58 543

原创 valgrind安装使用教程

【代码】valgrind安装使用教程。

2024-01-23 09:59:27 410

原创 操作系统导论-课后作业-ch8

通过上图的模拟,我们可以看到,I/O结束后当前任务是放置在同等级队列的后面,也就是job0还需要等待job1运行才能继续执行。5%也就是20分之一,要想确保,需要设置-B 200,也即每200ms确保此任务能运行10分钟。可以看到通过boost的方法,job0在job1和job2出现后的一段时间内依然能得到运行。从上图可见,修改为大写的-I之后,完成I/O后的任务会被放置在队列的最前端,从而直接执行。可见此时统计的是总的运行时间了,触发I/O依旧不影响。-I表示单次I/O所需时间。

2024-01-17 17:12:23 577

原创 操作系统导论-课后作业-ch7

相关软件对应异步社区资源HW-Scheduler。

2024-01-17 11:49:58 353

原创 操作系统导论-课后作业-ch6

执行结果如下:最多精确到us,并且大致精确(并不完全精确),需要多迭代几次减少误差。

2024-01-16 21:44:44 586

原创 gdb调试常用指令

u 按十六进制格式显示无符号整型。x 按十六进制格式显示变量。a 按十六进制格式显示变量。d 按十进制格式显示变量。o 按八进制格式显示变量。t 按二进制格式显示变量。f 按浮点数格式显示变量。c 按字符格式显示变量。

2024-01-15 12:22:46 395

原创 MIT 6.S081---Lab: page tables

这样做的话有个问题,因为内核的页表不包含这些映射,进行系统调用时必须传入物理地址而不能传入虚拟地址,而本处要做的便是在每个用户进程内都维护一个内核页表,进程切换的时候在硬件维度就切换内核页表,分配时也要用这个内核页表。(也就是用新的内核页表替代用户页表)本题的目标是要用copyin_new 来取代copyin,用copyinstr_new取代copyinstr,其中需要在修改原用户页表时也同步修改新建的内核页表。在XV6原先的设计下,只有一张内核表,而每个进程都维护了一张自己的进程用户页表。

2024-01-15 11:50:42 430

原创 将github项目导入gitee中

【代码】将github文件导入gitee中。

2024-01-11 15:42:35 553

原创 操作系统导论-课后作业-ch5

从上图中可见,wait返回的是子进程的进程号,而子进程中使用wait并不会发生什么,它会等待子进程自己的子进程结束。子进程会保持和父进程一样的值100,当子进程和父进程都改变x的值时,变量会各自单独保持一份互不影响,相互隔离。同样是返回pid,但是waitpid传入的参数不同,需要传入子进程的id、状态参数以及额外的选项。1次并没有发现并发问题,试过1000次也没什么问题。

2024-01-11 12:30:45 556

原创 操作系统导论-课后作业-ch4

对应异步社区资源HW-CPU-Intro。

2024-01-05 23:22:34 427

原创 Git学习笔记

2、执行后可以看到,仅仅在项目目录多出了一个.git目录,关于版本等的所有信息都在这个目录里面。有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等。1、另一种方式是克隆远程目录,由于是将远程服务器上的仓库完全镜像一份至本地!创建本地仓库的方法有两种:一种是创建全新的仓库,另一种是克隆远程仓库。

2023-12-26 15:49:28 527

原创 vim学习笔记

vim学习笔记Linux Vim编辑器的基本使用显示行号 set nu自动补全 CTRL-N或CTRL-P$到当前行的末尾u 撤销上一步的操作Ctrl+r 恢复上一步被撤销的操作vim下配置tab缩进格数原始文件: hello world nice普通缩进shift + > (或者 Shift + < ),注意:可能需要摁两下才有效果。批量缩进摁下 Ctrl + v 或者 v,然后方向键 ←→↑↓ 选择要缩进的行(这儿选中第

2023-12-26 15:46:02 202

原创 MIT 6.S081---Lab: system calls

对gdb配置有问题的可以参考。

2023-12-26 14:06:21 58

原创 MIT 6.S081---Lab util: Unix utilities

选择的是Vmware+ubuntu的配置,注意ubuntu的版本一定要是20.04,作者试过16版本,不行,建议直接安装20.04版,不然环境配置都浪费不少时间有点得不偿失。(Vmware可以用Virtualbox代替)

2023-12-23 22:24:20 243

原创 快手游戏客户端面经

一面凉,感觉快手面试难度很大。

2023-12-21 21:07:45 74

原创 猿辅导后端面经

读未提交、读提交、可重复读、串行化。

2023-12-21 21:06:45 21

原创 莉莉丝 游戏服务端开发面经

一面完凉凉,感觉问的有点偏客户端了。

2023-12-21 21:05:42 85

原创 阿里控股 面经

一面凉,甚至被面试官羞辱。

2023-12-21 21:04:23 291

原创 天翼云c++面经

一面+二面都过了,池子内泡没了。

2023-12-21 21:03:01 39

原创 阿里-lazada java开发 面经

一面就挂了,java还是不太擅长的东西呀。

2023-12-21 20:59:25 50

原创 米哈游游戏构建开发工程师面经

在计算机科学中,内联函数(有时称作在线函数或编译时期展开函数)是一种编程语言结构,用来建议编译器对一些特殊函数进行内联扩展(有时称作在线扩展);也就是说建议编译器将指定的函数体插入并取代每一处调用该函数的地方(上下文),从而节省了每次调用函数带来的额外时间开支。但在选择使用内联函数时,必须在程序占用空间和程序执行效率之间进行权衡,因为过多的比较复杂的函数进行内联扩展将带来很大的存储资源开支。另外还需要特别注意的是对递归函数的内联扩展可能引起部分编译器的无穷编译。

2023-12-21 20:58:00 280

原创 灵犀互娱游戏服务端开发面经

一面完挂。。。

2023-12-21 20:51:51 62

原创 大疆c++开发面经

2023-12-21 20:50:20 53

原创 京东后端开发工程师秋招面经

面了两个部门,都是一面就结束了。。。

2023-12-21 20:48:29 36

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除