-
Notifications
You must be signed in to change notification settings - Fork 154
/
Copy pathFAQ.html
1024 lines (507 loc) · 58.2 KB
/
FAQ.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE HTML>
<html lang="" >
<head>
<meta charset="UTF-8">
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<title>常见问题(FAQ) · GitBook</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="description" content="">
<meta name="generator" content="GitBook 3.2.3">
<link rel="stylesheet" href="gitbook/style.css">
<link rel="stylesheet" href="gitbook/gitbook-plugin-intopic-toc/style.css">
<link rel="stylesheet" href="gitbook/gitbook-plugin-page-footer-ex/style/plugin.css">
<link rel="stylesheet" href="gitbook/gitbook-plugin-callouts/plugin.css">
<link rel="stylesheet" href="gitbook/gitbook-plugin-highlight/website.css">
<link rel="stylesheet" href="gitbook/gitbook-plugin-search/search.css">
<link rel="stylesheet" href="gitbook/gitbook-plugin-fontsettings/website.css">
<link rel="stylesheet" href="gitbook/gitbook-plugin-theme-comscore/test.css">
<link rel="stylesheet" href="styles.css">
<meta name="HandheldFriendly" content="true"/>
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<link rel="apple-touch-icon-precomposed" sizes="152x152" href="gitbook/images/apple-touch-icon-precomposed-152.png">
<link rel="shortcut icon" href="gitbook/images/favicon.ico" type="image/x-icon">
<link rel="next" href="why.html" />
<link rel="prev" href="blank.html" />
</head>
<body>
<div class="book">
<div class="book-summary">
<div id="book-search-input" role="search">
<input type="text" placeholder="Type to search" />
</div>
<nav role="navigation">
<ul class="summary">
<li class="chapter " data-level="1.1" data-path="index.html">
<a href="index.html">
Introduction
</a>
</li>
<li class="chapter " data-level="1.2" data-path="PA0.html">
<a href="PA0.html">
PA0 - 世界诞生的前夜: 开发环境配置
</a>
<ul class="articles">
<li class="chapter " data-level="1.2.1" data-path="0.1.html">
<a href="0.1.html">
Installing GNU/Linux
</a>
</li>
<li class="chapter " data-level="1.2.2" data-path="0.2.html">
<a href="0.2.html">
First Exploration with GNU/Linux
</a>
</li>
<li class="chapter " data-level="1.2.3" data-path="0.3.html">
<a href="0.3.html">
Installing Tools
</a>
</li>
<li class="chapter " data-level="1.2.4" data-path="0.4.html">
<a href="0.4.html">
Configuring vim
</a>
</li>
<li class="chapter " data-level="1.2.5" data-path="0.5.html">
<a href="0.5.html">
More Exploration
</a>
</li>
<li class="chapter " data-level="1.2.6" data-path="0.6.html">
<a href="0.6.html">
Getting Source Code for PAs
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.3" data-path="PA1.html">
<a href="PA1.html">
PA1 - 开天辟地的篇章: 最简单的计算机
</a>
<ul class="articles">
<li class="chapter " data-level="1.3.1" data-path="1.1.html">
<a href="1.1.html">
在开始愉快的PA之旅之前
</a>
</li>
<li class="chapter " data-level="1.3.2" data-path="1.2.html">
<a href="1.2.html">
开天辟地的篇章
</a>
</li>
<li class="chapter " data-level="1.3.3" data-path="1.3.html">
<a href="1.3.html">
RTFSC
</a>
</li>
<li class="chapter " data-level="1.3.4" data-path="1.4.html">
<a href="1.4.html">
基础设施
</a>
</li>
<li class="chapter " data-level="1.3.5" data-path="1.5.html">
<a href="1.5.html">
表达式求值
</a>
</li>
<li class="chapter " data-level="1.3.6" data-path="1.6.html">
<a href="1.6.html">
监视点
</a>
</li>
<li class="chapter " data-level="1.3.7" data-path="1.7.html">
<a href="1.7.html">
如何阅读手册
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.4" data-path="PA2.html">
<a href="PA2.html">
PA2 - 简单复杂的机器: 冯诺依曼计算机系统
</a>
<ul class="articles">
<li class="chapter " data-level="1.4.1" data-path="2.1.html">
<a href="2.1.html">
不停计算的机器
</a>
</li>
<li class="chapter " data-level="1.4.2" data-path="2.2.html">
<a href="2.2.html">
RTFSC(2)
</a>
</li>
<li class="chapter " data-level="1.4.3" data-path="2.3.html">
<a href="2.3.html">
程序, 运行时环境与AM
</a>
</li>
<li class="chapter " data-level="1.4.4" data-path="2.4.html">
<a href="2.4.html">
基础设施(2)
</a>
</li>
<li class="chapter " data-level="1.4.5" data-path="2.5.html">
<a href="2.5.html">
输入输出
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.5" data-path="PA3.html">
<a href="PA3.html">
PA3 - 穿越时空的旅程: 批处理系统
</a>
<ul class="articles">
<li class="chapter " data-level="1.5.1" data-path="3.1.html">
<a href="3.1.html">
最简单的操作系统
</a>
</li>
<li class="chapter " data-level="1.5.2" data-path="3.2.html">
<a href="3.2.html">
穿越时空的旅程
</a>
</li>
<li class="chapter " data-level="1.5.3" data-path="3.3.html">
<a href="3.3.html">
用户程序和系统调用
</a>
</li>
<li class="chapter " data-level="1.5.4" data-path="3.4.html">
<a href="3.4.html">
文件系统
</a>
</li>
<li class="chapter " data-level="1.5.5" data-path="3.5.html">
<a href="3.5.html">
精彩纷呈的应用程序
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.6" data-path="PA4.html">
<a href="PA4.html">
PA4 - 虚实交错的魔法: 分时多任务
</a>
<ul class="articles">
<li class="chapter " data-level="1.6.1" data-path="4.1.html">
<a href="4.1.html">
多道程序
</a>
</li>
<li class="chapter " data-level="1.6.2" data-path="4.2.html">
<a href="4.2.html">
虚实交错的魔法
</a>
</li>
<li class="chapter " data-level="1.6.3" data-path="4.3.html">
<a href="4.3.html">
超越容量的界限
</a>
</li>
<li class="chapter " data-level="1.6.4" data-path="4.4.html">
<a href="4.4.html">
来自外部的声音
</a>
</li>
<li class="chapter " data-level="1.6.5" data-path="4.5.html">
<a href="4.5.html">
编写不朽的传奇
</a>
</li>
</ul>
</li>
<li class="chapter " data-level="1.7" data-path="blank.html">
<a href="blank.html">
杂项
</a>
<ul class="articles">
<li class="chapter active" data-level="1.7.1" data-path="FAQ.html">
<a href="FAQ.html">
常见问题(FAQ)
</a>
</li>
<li class="chapter " data-level="1.7.2" data-path="why.html">
<a href="why.html">
为什么要学习计算机系统基础
</a>
</li>
<li class="chapter " data-level="1.7.3" data-path="linux.html">
<a href="linux.html">
Linux入门教程
</a>
</li>
<li class="chapter " data-level="1.7.4" data-path="man.html">
<a href="man.html">
man入门教程
</a>
</li>
<li class="chapter " data-level="1.7.5" data-path="git.html">
<a href="git.html">
git入门教程
</a>
</li>
<li class="chapter " data-level="1.7.6" data-path="nemu-isa-api.html">
<a href="nemu-isa-api.html">
NEMU ISA相关API说明文档
</a>
</li>
<li class="chapter " data-level="1.7.7" data-path="changelog.html">
<a href="changelog.html">
更新日志
</a>
</li>
<li class="chapter " data-level="1.7.8" data-path="i386-intro.html">
<a href="i386-intro.html">
i386手册指令集阅读指南
</a>
</li>
<li class="chapter " data-level="1.7.9" data-path="exec.html">
<a href="exec.html">
指令执行例子
</a>
</li>
</ul>
</li>
<li class="divider"></li>
<li>
<a href="https://www.gitbook.com" target="blank" class="gitbook-link">
Published with GitBook
</a>
</li>
</ul>
</nav>
</div>
<div class="book-body">
<div class="body-inner">
<div class="book-header" role="navigation">
<!-- Title -->
<h1>
<i class="fa fa-circle-o-notch fa-spin"></i>
<a href="." >常见问题(FAQ)</a>
</h1>
</div>
<div class="page-wrapper" tabindex="-1" role="main">
<div class="page-inner">
<div id="book-search-results">
<div class="search-noresults">
<section class="normal markdown-section">
<h2 id="常见问题faq">常见问题(FAQ)</h2>
<h3 id="pa是什么意思">PA是什么意思</h3>
<p>PA是Programming Assignment的缩写, yzh也觉得这个名字起得有点随意.</p>
<h3 id="pa是不是组成原理体系结构实验">PA是不是组成原理/体系结构实验</h3>
<p>都不是, PA不要求大家使用硬件描述语言进行编码,
而是通过C语言开发一款模拟器以及上层的软件(裸机运行时环境, 简易操作系统等).
与侧重于硬件层次的传统组成原理/体系结构实验相比, PA更注重计算机系统抽象层次的认识和理解.</p>
<h3 id="pa是不是很难">PA是不是很难</h3>
<p>PA是一个<font color="red">超硬核</font>的编程实验,
其中的硬核体现在, 只有同时满足以下条件, 你才有可能比较顺利地完成PA:</p>
<ul>
<li>端正心态, 学会STFW/RTFM独立解决问题</li>
<li>掌握工具, 知道用什么样的工具快速解决什么样的问题</li>
<li>了解细节, 明白每一个文件每一行代码的行为</li>
<li>系统编程, 熟悉计算机系统中每个模块之间的联系</li>
</ul>
<p>如果之前没有受到过类似的训练, 即使是高年级的研究生也会感到一定的困难.
所以对绝大部分同学来说, 做PA就是一个吃苦的过程.</p>
<h3 id="为什么要用这么变态的pa来折磨我">为什么要用这么变态的PA来折磨我</h3>
<p>因为大家普遍都很菜, 按照目前的状态, 你毕业之后很可能无法在社会的毒打下存活.
以下例子展示了将来你可能会面对什么样的毒打:</p>
<pre><code>你的导师/老板: 你来做一个xxx, 目标是达到yyy的效果.
</code></pre><p>讲义? 框架代码? 不存在的.
如果我们不提供讲义和框架代码, 让你写一个能跑仙剑的NEMU, 这就和你毕业后面临的任务很类似了.</p>
<p>这就是社会毒打你的第一招必杀技: 充满不确定性的未知问题.
如果你现在连链表都调不好, 显然你几乎无法胜任这些不确定的任务.
作为算是扛得住社会毒打的人, 我们知道你缺什么,
知道应该给你挖什么样的坑, 设置什么样的技能训炼, 你就会得到什么程度的成长.</p>
<p>所以我们设计PA来把现在的你毒打一顿, 让你受尽折磨, 吃尽苦头,
归根到底是为了让将来的你在求职时候更具有竞争力, 经受得起社会的毒打.</p>
<h3 id="我将来不从事系统相关的工作-就不会那么痛苦了">我将来不从事系统相关的工作, 就不会那么痛苦了</h3>
<p>太天真了. 就算是应用程序, 几千个模块之间通过几万个API交互的场景都是家常便饭,
复杂性是社会毒打你的第二招必杀技.</p>
<h3 id="现在是开源的时代-开源在《十四五规划和2035年远景目标纲要》中首次被列入国家发展规划-那我为什么不能参考别人的代码心得攻略来学习">现在是开源的时代, 开源在《十四五规划和2035年远景目标纲要》中首次被列入国家发展规划, 那我为什么不能参考别人的代码/心得/攻略来学习</h3>
<p>你来上课来做实验, 就应该接受我们设置的训练, 而独立完成实验是训练最基本的要求之一,
参考别人代码就是违反<a href="http://integrity.mit.edu/" target="_blank">学术诚信</a>的行为, 针对这一点你没有任何理由讨价还价.</p>
<p>就算退一万步来讲, 你说参考别人是为了学习, 那你能写出比别人更好的代码作为学习的成果吗?
你要是真有这样的学习能力, 相信你也能够在遵守<a href="http://integrity.mit.edu/" target="_blank">学术诚信</a>的前提下自己独立完成实验.</p>
<p>同理, 阅读网上流传的心得和攻略, 也是属于违反<a href="http://integrity.mit.edu/" target="_blank">学术诚信</a>的行为,
因为你没有通过自己的努力和预期的训练来获得正确的答案.</p>
<h3 id="为什么不能把代码心得攻略上传到公开的地方让大家学习">为什么不能把代码/心得/攻略上传到公开的地方让大家学习</h3>
<p>因为这违反了<a href="http://integrity.mit.edu/" target="_blank">学术诚信</a>.
PA和其它项目不一样, 它本质上是一个课程作业,
你无法保证来看你代码的同学都是抱着纯洁的学习心态(我就看看我不抄).
如果有同学抱着抄袭的心态, 你的代码不仅会让他失去锻炼的机会,
而且还会破坏课程的公平性: 你一个bug调3天, 你同学1分钟就抄完了, 你甘心吗?</p>
<p>此外, 我们相信你的代码里面并没有太多值得大家学习的地方,
比如你的代码风格好看吗? 你设计的API合理吗? 和框架代码相比有什么新特色吗?
在你推荐自己的代码之前, 可以先看看一些优秀的开源项目.
如果你确实对自己的代码有信心, 不妨给yzh提建议, 如果你的建议很不错,
我们会把你加入到感谢名单中, 同时你的改进也可以一直在学弟学妹的作业中流传.</p>
<p>如果你上传代码只是为了托管, 那可以选择github的私人仓库.</p>
<p>同理, 将自己的心得和攻略上传到公开的地方, 也是属于违反<a href="http://integrity.mit.edu/" target="_blank">学术诚信</a>的行为.</p>
<p>所以, <font color="red">你公开的代码/心得/攻略很大概率并不能从真正的意义上帮助大家学习,
相反而是在很多层面上伤害大家.</font></p>
<h3 id="能不能公布阶段性的参考答案-这样即使bug调不出来-也能往后做">能不能公布阶段性的参考答案, 这样即使bug调不出来, 也能往后做</h3>
<p>不能. 把代码写对是对码农最基本的要求, 代码还没写对, 就不应该往后做.
以后你进入社会, 如果你交付的代码给客户造成经济损失, 是要赔钱的.
所以要学会对自己写的代码负责.</p>
<h3 id="我总觉得讲义写得不清楚">我总觉得讲义写得不清楚</h3>
<p>你毕业后进入公司/课题组, 不会再有讲义具体地告诉你应该做什么,
总有一天你需要在脱离讲义的情况下完成任务.
我们希望你现在就放弃"讲义和框架代码会把我应该做的一切细节清楚地告诉我"的幻想, 为自己的成长负起责任:</p>
<ul>
<li>不知道在说什么, 说明你对知识点的理解还不够清楚, 这时候你应该去看书/看手册</li>
<li>不知道要做什么/怎么做, 说明你的系统观还是零碎的,
理解不了系统中各个模块之间的联系, 这时候你应该RTFSC, 尽自己最大努力梳理并理解系统中的一切细节</li>
<li>bug调不出来, 说明你不清楚程序正确的预期行为, 你需要RTFSC理解程序应该如何运行;
此外也说明你不重视工具和方法的使用, 你需要花时间去体验和总结它们</li>
</ul>
<p>如果你发现自己有以上情况, 你还是少抱怨, 多吃苦吧.</p>
<p>当然, 如果你仍然觉得讲义写得不清楚, 可以联系yzh.</p>
<h3 id="总是要求大家stfwrtfmrtfsc-我有问题都不敢问了-老师助教倒是轻松">总是要求大家STFW/RTFM/RTFSC, 我有问题都不敢问了, 老师助教倒是轻松</h3>
<p>老师助教不是你的保姆, 你需要先搞清楚哪些问题是你可以问的, 哪些问题是你应该自己解决的:
我们鼓励你提出关于方法层面的疑问以及对各种问题的探索性想法,
但不要直接让别人提供你想要的答案, 因为学会独立分析问题也是PA训练的一个重要环节.</p>
<p>一个我们不愿意回答的提问如下:</p>
<pre><code>Q: 我的程序段错误了, 怎么办?
A: 机器永远是对的.
</code></pre><p>如果你确实需要一些调试相关的帮助, 那怎么办?
你需要展示你为了解决问题而付出过的努力, 当我们看到了你的努力, 也会认可你受到的训练.
例如:</p>
<pre><code>Q: 我的程序在xxx的情况下段错误了, 我进行了以下尝试
* 首先我做了aaa, 现象是AAA, 我得到的结论是XXX
* 然后我做了bbb, 现象是BBB, 我得到的结论是YYY
* 我还做了ccc, 现象是CCC, 我得到的结论是ZZZ
综上, 我觉得问题可能出在yyy, 但我接下来没有思路了, 我的分析和理解是否正确? 或者我忽略了什么吗?
</code></pre><h3 id="为什么用c语言写pa">为什么用C语言写PA</h3>
<p>首先C语言容易学, 可以给菜鸡们一个容易把编程能力补上的机会.
此外C语言的抽象少, 更接近机器, 更容易理解"程序如何在计算机上运行".
相对而言, 你很可能搞不清楚C++/python/java/scala/rust等各种语言特性背后的机制,
在调试代码的时候, 这会给你带来额外的挑战.
作为一个小型项目, 用C语言来写PA还是在可维护的范围的.</p>
<h3 id="我发现自己做pa的用时明显大于讲义中预估的时间">我发现自己做PA的用时明显大于讲义中预估的时间</h3>
<p>讲义中的时间是按照"中等水平"同学的能力来预估的.
这里"中等水平"并不是指"程序设计课程总评80分以上",
而是指"心态端正, 编写过500行以上代码的单个程序, 并且懂得调试".</p>
<p>根据过去的情况, 绝大部分程序设计课程总评90分以上的同学都达不到我们所说的"中等水平"的标准.
所以忘了你的程序设计课程成绩吧, 对PA来说它并没有什么价值.
(不过我们还是希望有一天这段话的描述不再符合实际.)</p>
<p>虽然程序设计课程成绩不能反映你们真实的编程水平,
但自己的编程水平是否扎实, 大部分同学还是心中有数的.
所以在这里我们也根据编程水平对讲义预估的时间进行调整, 得到一个更加可信的预估时间
(假设讲义上预估的时间是<code>x</code>小时):</p>
<ul>
<li>神: <code>x / 5</code></li>
<li>巨佬: <code>x / 3</code></li>
<li>大佬: <code>x / 2</code></li>
<li>编程基础扎实: <code>x</code></li>
<li>不会调试: <code>x * 2</code></li>
<li>不会写代码: <code>x * 3</code></li>
<li>即不会写代码又不认真做PA: <code>x * 5</code></li>
</ul>
<p>我们知道大部分同学无法客观地判断自己完成PA的真实用时, 所以拖延你就输了.</p>
<h3 id="我觉得pa对像我一样的菜鸡很不友好">我觉得PA对像我一样的菜鸡很不友好</h3>
<p>程序设计实验对菜鸡友好, 但为什么你做完之后还是菜鸡?
做一个对菜鸡友好的实验, 能力并不会得到提升.</p>
<p>如果你是菜鸡, 说明你之前该吃苦的时候没吃够, 现在比别人多吃苦就是应该的.</p>
<h3 id="我连完成pa1都觉得非常吃力">我连完成PA1都觉得非常吃力</h3>
<p>PA1和计算机系统的关联度偏低, 它主要是为了测试大家的编程能力而设计的.
如果你连完成PA1都觉得非常吃力, 那你就要给自己敲响警钟了: 快去学编程吧.</p>
<h3 id="我感觉大部分同学都无法在一学期内做完pa的全部内容">我感觉大部分同学都无法在一学期内做完PA的全部内容</h3>
<p>很正常, PA从一开始设计的时候就没有想过会让所有同学完成所有内容.
PA的设计理念是把目标定得很高, 强迫大家往上跳,
所以你会明显感觉到PA和你做过的其它实验都不太一样:
只要你愿意付出足够的努力, 即使你没有完成所有的内容,
你也会感到自己各个方面的技能都有了明显的提升.</p>
<p>每年确实会有同学直接躺倒放弃而挂科,
但也总有为数不少一批同学能坚持到最后, 锻炼出专业程序员该有的素质.
大家的编程水平有高有低, 如果你自己都觉得编程能力不行,
那你就应该去把编程能力补上来, 在那之前就不要抱有"完成PA所有内容"的幻想了.
一个比较合适的目标是"独立完成PA1和PA2", 最后你仍然有机会通过课程.</p>
<h3 id="坚持了好久还是搞不定-我想放弃了">坚持了好久还是搞不定, 我想放弃了</h3>
<p>也许是你坚持的姿势不对, 来跟yzh或者老师助教聊聊吧.</p>
<h3 id="我觉得应该搜集大家踩过的坑-这样后面做的同学就会顺利一些">我觉得应该搜集大家踩过的坑, 这样后面做的同学就会顺利一些</h3>
<p>这种想法是不对的, 掉坑里然后自己爬出来是训练重要的一环, 只有吃苦头才会让你成长.
如果你不想以后掉坑里, 正确的做法是现在花时间踩坑吃苦, 让自己变强大,
而不是通过投机取巧的方式绕过那些你本应该接受的训练.</p>
<h3 id="为什么我本地测试都是对的-但提交到oj总是无法通过">为什么我本地测试都是对的, 但提交到OJ总是无法通过</h3>
<p>因为你的代码有bug.</p>
<h3 id="pa的内容太丰富了-我感觉没办法完全消化">PA的内容太丰富了, 我感觉没办法完全消化</h3>
<p>所以PA值得二周目.</p>
<h3 id="下学期的oslab是不是比pa更难">下学期的OSlab是不是比PA更难</h3>
<p>在还没有PA的那个年代, jyy的OSlab是令人闻风丧胆的实验, 现在PA取代了这个位置.
你之所以觉得PA难, 一个主要原因就是前导课程没有给你足够的训练,
没有把你培养成一个素质合格的码农, 所以PA不得不额外承担这个角色.</p>
<p>从专业知识的角度来说, OSlab就应该比PA难.
但如果你已经在PA中训练出了码农应有的素质, 你也就已经准备好接受OSlab的挑战了.</p>
<h3 id="pa和oslab有什么区别和联系">PA和OSlab有什么区别和联系</h3>
<ol>
<li>PA独有的内容: 上至运行时库函数和真实应用程序(仙剑, ONScripter等),
下至ISA模拟器的实现(寄存器, 指令, 分页机制等)</li>
<li>OSlab独有的内容: 并发(锁, 同步等), 持久化(可靠性, 崩溃一致性等)</li>
<li>PA和OSlab少量重合的部分: 上下文切换, 系统调用, 文件系统, 内存管理等.
但PA在涉及这些内容的时候是以广度优先为目标, 目的是通过设计一个最简单的模块,
把程序和计算机之前的关系串起来;
而OSlab会深入地展开这些内容, 比如ext文件系统, mmap等.</li>
</ol>
<p>PA是OSlab的前导实验, 完成PA就会对操作系统有一个基本但不算深入的认识,
这时候再做OSlab, 上手就会更加顺利.</p>
<h3 id="和大班的pa相比有什么区别-哪个更难">和大班的PA相比有什么区别, 哪个更难</h3>
<p>大班PA是主线PA 2016版本的一个分支, 并且根据授课教师的想法进行调整.
随着主线PA的演进, 和大班PA的区别也逐渐增大.
鉴于"难"这个说法比较主观, 我们从另一个角度来展示两者的区别:
对于一个难点, 大班PA的设计理念是通过降低要求(提供提示甚至是代码)的方式来弱化它,
而主线PA的设计理念是呈现科学的方法来引导大家解决它.</p>
<p>所以从某种程度上来说, 大班PA降低要求的做法会对菜鸡来说会更友好,
但相对地, 全体学生在大班PA中受到的训练都会少很多.
"计算机系统综合实验"课程对大班学生的少量抽样可以证明上述结论.
我们认为不应该为了照顾部分菜鸡而牺牲所有学生成长(吃苦)的机会,
所以主线PA没有选择降低要求, 而是让大家根据自身情况设置一个合适目标去努力.</p>
<h3 id="我觉得pa有的设计不合理">我觉得PA有的设计不合理</h3>
<p>欢迎联系yzh.</p>
<footer class="page-footer-ex"> <span class="page-footer-ex-copyright"> By <a href="https://sashimi-yzh.github.io/" target="_blank">Zihao Yu</a>, 采用<a href="http://creativecommons.org/licenses/by-nc-sa/3.0/cn/" target="_blank">知识共享 署名-非商业性使用-相同方式共享 3.0 中国大陆 许可协议</a>发布 </span>            <span class="page-footer-ex-footer-update"> 此页面修订于: 2023-02-25 08:25:35 </span> </footer>
</section>
</div>
<div class="search-results">
<div class="has-results">
<h1 class="search-results-title"><span class='search-results-count'></span> results matching "<span class='search-query'></span>"</h1>
<ul class="search-results-list"></ul>
</div>
<div class="no-results">
<h1 class="search-results-title">No results matching "<span class='search-query'></span>"</h1>
</div>
</div>
</div>
</div>
</div>
</div>
<a href="blank.html" class="navigation navigation-prev " aria-label="Previous page: 杂项">
<i class="fa fa-angle-left"></i>
</a>
<a href="why.html" class="navigation navigation-next " aria-label="Next page: 为什么要学习计算机系统基础">
<i class="fa fa-angle-right"></i>
</a>
</div>
<script>
var gitbook = gitbook || [];
gitbook.push(function() {
gitbook.page.hasChanged({"page":{"title":"常见问题(FAQ)","level":"1.7.1","depth":2,"next":{"title":"为什么要学习计算机系统基础","level":"1.7.2","depth":2,"path":"why.md","ref":"why.md","articles":[]},"previous":{"title":"杂项","level":"1.7","depth":1,"path":"blank.md","ref":"blank.md","articles":[{"title":"常见问题(FAQ)","level":"1.7.1","depth":2,"path":"FAQ.md","ref":"FAQ.md","articles":[]},{"title":"为什么要学习计算机系统基础","level":"1.7.2","depth":2,"path":"why.md","ref":"why.md","articles":[]},{"title":"Linux入门教程","level":"1.7.3","depth":2,"path":"linux.md","ref":"linux.md","articles":[]},{"title":"man入门教程","level":"1.7.4","depth":2,"path":"man.md","ref":"man.md","articles":[]},{"title":"git入门教程","level":"1.7.5","depth":2,"path":"git.md","ref":"git.md","articles":[]},{"title":"NEMU ISA相关API说明文档","level":"1.7.6","depth":2,"path":"nemu-isa-api.md","ref":"nemu-isa-api.md","articles":[]},{"title":"更新日志","level":"1.7.7","depth":2,"path":"changelog.md","ref":"changelog.md","articles":[]},{"title":"i386手册指令集阅读指南","level":"1.7.8","depth":2,"path":"i386-intro.md","ref":"i386-intro.md","articles":[]},{"title":"指令执行例子","level":"1.7.9","depth":2,"path":"exec.md","ref":"exec.md","articles":[]}]},"dir":"ltr"},"config":{"gitbook":"3.x.x","theme":"default","variables":{},"plugins":["theme-comscore","intopic-toc","localized-footer","page-footer-ex","callouts"],"pluginsConfig":{"callouts":{"option":{"alert":"info","picto":"fa-edit"},"flag":{"alert":"success","picto":"fa-flag"},"question":{"alert":"info","picto":"fa-question-circle"},"info":{"alert":"info","picto":"fa-info-circle"},"todo":{"alert":"warning","picto":"fa-edit"},"caution":{"alert":"danger","picto":"fa-bullhorn"},"danger":{"alert":"danger","picto":"fa-exclamation"},"showTypeInHeader":false},"intopic-toc":{"isCollapsed":false,"isScrollspyActive":true,"label":"导航","maxDepth":6,"mode":"nested","selector":".markdown-section h2, .markdown-section h3, .markdown-section h4","visible":true},"page-footer-ex":{"copyright":"By [Zihao Yu](https://sashimi-yzh.github.io/), 采用[知识共享 署名-非商业性使用-相同方式共享 3.0 中国大陆 许可协议](http://creativecommons.org/licenses/by-nc-sa/3.0/cn/)发布","markdown":true,"update_format":"YYYY-MM-DD HH:mm:ss","update_label":"此页面修订于: "},"search":{},"localized-footer":{"filename":"FOOTER.md","hline":"true"},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"theme-comscore":{},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles.css","pdf":"styles.css"}},"file":{"path":"FAQ.md","mtime":"2023-02-25T00:25:35.603Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2025-01-03T02:26:44.310Z"},"basePath":".","book":{"language":""}});
});
</script>
</div>
<script src="gitbook/gitbook.js"></script>
<script src="gitbook/theme.js"></script>
<script src="gitbook/gitbook-plugin-intopic-toc/anchor.min.js"></script>
<script src="gitbook/gitbook-plugin-intopic-toc/gumshoe.polyfills.min.js"></script>
<script src="gitbook/gitbook-plugin-intopic-toc/plugin.js"></script>
<script src="gitbook/gitbook-plugin-search/search-engine.js"></script>
<script src="gitbook/gitbook-plugin-search/search.js"></script>