HNU-计算机系统CS-甘晴void学习感悟

本学期学的两门核心课,一个CS,一个OS。对我来说都有一定难度。

CS总评90+/100。(比较靠前)

主要是期末考试没太发挥好,

主要原因是存储部分有个++没有考虑写的情况,送了8分。

总领

CS的学习采用最经典的书——CSAPP,也被称为计算机领域圣经,这是必看的书。

学习完这本书,对于计算机的组成以及汇编语言会有一定的了解,能大致知道计算机的系统层面是怎么工作的。

 教学采用的是第二版,我的书是第三版,这两者之间的主要不同点在于第二版是以32位系统为例讲解的,而第三版是以64位系统为例讲解的。主要在第三章汇编语言的部分会有不同,一是寄存器的表述,64位系统寄存器有rax%等,而32位系统寄存器只有eax%等。另一个主要是调用函数时存储调用参数以及返回参数,64位系统由于寄存器较多,有时可能不用在栈内储存调用参数,但32位系统寄存器较少,会更多地占用栈的空间。此外,返回的参数储存在哪里也会有影响。

总而言之,应试而言,至少第三章的汇编语言部分得看第二版,否则会做不了题目。

(封面是著名的存储器山,反应主存读写吞吐量的)

课程成绩主要由 【作业+实验+小班】 + 期中(10%)+ 期末(40%)这5个部分组成

【2024.2.26补充】重新上了一下2022级的课,好像实验占比20%

作业和实验不知道怎么给分的。给分的算法很迷。

作业

作业我看了一眼,几乎都是100,大家应该都一样。

说实在,学到大二往后,看作业基本上没什么意义了,大家都能校对答案到100分,平时分都能拉满,究竟学没学懂,就只有自己能知道了。

作业我觉得还是自己要做一遍,给挑出来作为作业的题目,要么是往年的期末考题,要么是书上原题,对于知识掌握和应试都有很大帮助,做完之后校对到100即可,错的自己记号。

实验 

第一个实验是研究生助教学姐验收的,可能我和助教都没太看懂,好像给了A。

第二个实验是一位临时征派的老师负责验收,可能老师和我也都没太懂,讲运行时栈我给他讲了几遍,他好像能听懂了,给了我B++,不是很懂。

第三个实验和第四个实验都是A橙_学长给我验收的,A橙_学长可真的是太懂了,因为他去年自己做过这些实验,只能说不愧是计科top,太强了!!!学长不仅能够在短时间内判断我们有没有真的自己做这个实验,还能通过几个问题快速确定我们理解到了什么程度。厉害!

PrototypeSystemLab,DataLab,BombLab,ShellLab

这四个实验都很精彩。【补:如果有志于之后学习系统的同学,一定要认真完成】

【BombLab】

特别是BombLab,特别值得花很多时间研究!从一点都不懂,通过自己研究搞懂整个给定汇编代码的运行逻辑。对于自己的汇编语言基础是一个很大的提升。记得一开始几题其实很简单,但我花了好多时间去理解它的模式,一道题往往能花上一个下午,甚至一个晚上。总共六道题和隐藏题加起来应该能研究了20个小时。可能是我天资比较愚笨,但这种依靠时间堆砌的方法真的能让我看懂汇编代码。看着这些汇编代码能让我忘记打崩三,忘记原神启动。从一点不懂到有一点懂,再到有一些理解的过程,能给人带来纯真的喜悦。

【补:BombLab自己认真做一遍,对做汇编题有很重大的帮助,千万要抽时间自己做一遍】

HNU-计算机系统-实验3-BombLab_甘晴void的博客-CSDN博客本次实验是根据每个同学的学号来生成的,所以无法抄袭,只能借鉴思路,每个同学的问题从答案到过程都有许多不同,唯一相同的只能说是每题的考点。本次实验收到的是一个文件包,打开之后是这样的几个文件。有关这个实验的讲解我录制了一个视频上传了B站,链接如下,感觉报告没有看懂的同学可以看一下这个视频,特别是对于汇编代码有进一步的讲解,可能会更容易理解一些。https://blog.csdn.net/qq_39480177/article/details/130410714

【ShellLab】

ShellLab让我有机会能自己实现一个简单shell,这个实验主要是参考的学长代码作为主体框架,然后自己去看懂复现,应该是我自己代码能力的问题。主要就是信号的传递以及处理,包括信号处理函数,重点还在于对于jobs列表的修改要上锁,这里涉及到OS的临界区问题,这个列表同时只能一个在修改,防止出现并发问题。具体的解释在实验里有。

HNU-计算机系统-实验4-ShellLab_甘晴void的博客-CSDN博客这个实验是大家在本课程第一次体验系统级编程,涉及过程,过程控制和信号的相关知识。1.你需要干什么? 你需要构建一个简单的类Unix/Linux Shell。基于已经提供的“微Shell”框架tsh.c,完成部分函数和信号处理函数的编写工作。使用sdriver.pl可以评估你所完成的shell的相关功能。2. 准备工作 使用命令tar xvf shelab-handout.tar 解压缩文件; 使用命令 make 去编译和链接一些测试例程;~~~~~~~~~~~~~~~~~~~~~~https://blog.csdn.net/qq_39480177/article/details/130785729

【DataLab】

DataLab主要是对于二进制数的理解,我们的实验只是一小部分,还有很多题目在CSAPP官网上有。这个实验主要是在限制操作数与操作符下,只通过二进制数之间的与或非反移位等简单的限制操作,实现将这个二进制数改变成目标的效果。

HNU-计算机系统-实验2-DataLab_甘晴void的博客-CSDN博客HNU-计算机系统-实验2-DataLabhttps://blog.csdn.net/qq_39480177/article/details/129779347【原型机实验】

说实在,这个实验我觉着其实没那么有意思。但是也是对虚拟机理解的一个用处吧。

HNU-计算机系统-实验1-PrototypeSystemLab_甘晴void的博客-CSDN博客了解冯诺伊曼体系结构;理解指令集结构及其作用;理解计算机的运行过程,就是指令的执行过程,并初步掌握调试方法。理解计算机的运行过程,对指令集进行修改指令4 1 R2将累加步长1存放在R2内;此后指令2 R0 R1,这步每次将R0累加至R1,其中R1存放累加结果,也就是最终结果;指令3 R2 R0是计算下一个需要累加的数并存放在R0内。https://blog.csdn.net/qq_39480177/article/details/130417583

小班

小班是达老师(哒老师)教的,很喜欢这样有互动的小班,感觉能push我们学习

各次讨论课PPT如下:

讨论课1-8z

【challenge部分】

最有趣的是讨论课7的challenge部分,要求缩小可执行文件的大小,用最小的空间能运行并输出2023。实际上这个考察的就是对于链接静态库这一章的知识点的理解,称为一个实验毫不为过,我是花了一晚上的时间熬夜到3点,利用网上有限的资料进行了一些探索,虽然方向跟老师的方向可能不太一样,但还是做出了一些结果的。这个讨论真的非常有趣。

HNU-计算机系统-Challenge_甘晴void的博客-CSDN博客但这区区四行代码,在 Ubuntu 中使用 gcc 形成的可执行文件大小可能有 7KB 之多,请尝试分析 ta 到底增加了什么内容导致可执行文件的大小产生这样的膨胀?基于前述分析,如果代码是这样的:int main(void) { return 2023; }不修改这一行 C 代码源程序,你可以直接修改二进制可执行文件,获取功能没有任何变化的更小(字节数量)可执行文件吗?分享你的方法(^-^)https://blog.csdn.net/qq_39480177/article/details/130784916

期中

没什么好说的,给了题库,刷题就完事了。最好别扣分,错两道题总评就少0.3分,很致命。

期末

【2024.1.25补】

我的期末复习方法是看书+刷题,很平平无奇的方法,主要是坚持下去。

事先说明,我的方法适合特别想考好的小镇做题家,无师自通的大佬可以略过。

看书:

看书就是把CSAPP书从前往后看,然后做笔记(笔记我放GitHub上了,问我要链接即可),做笔记主要是为了怕自己看完后面的把前面的忘记了,考前再翻一遍起到巩固的作用。

做题:

① 能找到的往年期末卷子,都可以做一遍,看看题目是怎么出的,我该怎么答。

【提示】最好找一个志同道合并有一定实力的伙伴,边做边校对答案,然后不懂的进行讨论。

② CSAPP课本后面的习题也是很好的,可以翻一翻,看一看会不会答,往年也出现过出课本原题的情况。

心态:

事在人为,复习充分,考试就与我没有关系了。我要做的就是把我知道的都写上去,就行了。

湖南大学的系统在学科排名里是很靠前的,课程组的备课感觉也是很用心的,

祝大家都能从这门课程中收获获得感(成绩满意+学到东西)。

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: 申请内存、释放内存和查看内存使用情况。这些操作将通过系统调用来实现。内存管理器的主要功能是管理系统中的内存分配和释放,确保内存使用的高效性和安全性。虽然内存管理器还没有完成,但开发人员正在努力工作,以便在不久的将来发布完整的版本。 ### 回答2: 内存分配、内存释放和内存查找。内存分配可以让程序在运行时获取需要的内存空间,内存释放则是将不再需要的内存空间还给操作系统,以便重新分配给其他程序使用。内存查找则是检查某个内存地址是否已经被分配。这些功能对于操作系统运行和程序开发都具有很大的重要性。 内存管理器的实现主要考虑了几个因素。首先是内存的物理组织形式。操作系统需要能够识别内存的物理组织形式,才能够有效地进行内存管理。其次是内存的分配和释放。操作系统需要能够根据不同的需求分配不同大小的内存空间,并且能够及时地释放内存空间以提高系统的运行效率。还有一个重要的因素是内存的安全性。操作系统需要确保不同程序之间的内存空间互相隔离,避免出现内存泄露或者内存破坏等问题。 对于内存管理器的实现方式,目前有很多种不同的方法。其中,最常见的是分页内存管理方式。这种方式将内存空间分成若干个大小相等的页面,每个页面都有自己的地址和内存状态,操作系统只需要记录每个页面的状态和分配情况即可。当程序需要内存空间时,内存管理器会寻找空闲的页面,并将其分配给程序使用。当程序不再需要这些内存空间时,内存管理器会将其释放,并将页面标记为未分配状态。 总之,内存管理器是一个操作系统非常重要的组件,对于系统的性能和稳定性都有很大的影响。hnu-os的内存管理器的实现将进一步完善,以满足更多的需求。 ### 回答3: 内存分配、内存释放和内存查看。但是,由于内存管理器的实现需要许多复杂的算法和微妙的技巧,因此开发人员需要花费更多的时间来完成它。 内存管理器是操作系统中最重要的组件之一,因为它确保操作系统能够正确地使用计算机的内存。内存管理器的主要任务是将物理内存地址映射到虚拟内存地址,并跟踪哪些内存块已经被分配、哪些是空闲的,以及哪些正在使用。 在操作系统中,内存被分割成多个块。当一个程序需要内存时,内存管理器会分配一个或多个块来满足程序的要求。当程序完成它的工作并将内存释放时,内存管理器会将这些块标记为空闲状态,以备后续程序再次使用。 内存管理器还需要处理许多其他事项,例如内存碎片化和内存保护。内存碎片化是指当程序释放一些内存块时,内存管理器会留下一些无法使用的小空间,这些空间可能过小,无法再分配给其他程序。内存保护是指内存管理器可以防止程序访问不属于它的内存区域,从而保护操作系统和其他程序的稳定性和安全性。 总之,内存管理器对于计算机系统的稳定性和性能至关重要。虽然它可能需要一些时间来完成,但一旦实现,它将使操作系统功能更加完整且能够更好地支持更复杂的任务和应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值