没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
Pintos
by Ben Pfaff
i
Short Contents
1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
2 Project 1: Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3 Project 2: User Programs . . . . . . . . . . . . . . . . . . . . . . . . . 21
4 Project 3: Virtual Memory . . . . . . . . . . . . . . . . . . . . . . . . 38
5 Project 4: File Systems . . . . . . . . . . . . . . . . . . . . . . . . . . 49
A Reference Guide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
B 4.4BSD Scheduler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
C Coding Standards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
D Project Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . 97
E Debugging Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
F Development Tools. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
G Installing Pintos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Bibliography . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
License . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
ii
Table of Contents
1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1 Getting Started . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.1 Source Tree Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.2 Building Pintos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.3 Running Pintos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.4 Debugging versus Testing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2 Grading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2.1 Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2.2 Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2.2.1 Design Document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2.2.2 Source Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.3 Legal and Ethical Issues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.4 Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.5 Trivia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2 Project 1: Threads. . . . . . . . . . . . . . . . . . . . . . . . . 9
2.1 Background . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.1.1 Understanding Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.1.2 Source Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.1.2.1 ‘devices’ code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.1.2.2 ‘lib’ files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.1.3 Synchronization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.1.4 Development Suggestions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.2 Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.2.1 Design Document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.2.2 Alarm Clock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.2.3 Priority Scheduling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.2.4 Advanced Scheduler. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.3 FAQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.3.1 Alarm Clock FAQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.3.2 Priority Scheduling FAQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.3.3 Advanced Scheduler FAQ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3 Project 2: User Progr ams . . . . . . . . . . . . . . . . . 21
3.1 Background . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.1.1 Source Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.1.2 Using the File System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.1.3 How User Programs Work . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.1.4 Virtual Memory Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.1.4.1 Typical Memory Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.1.5 Accessing User Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.2 Suggested Order of Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . 27
iii
3.3 Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.3.1 Design Document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.3.2 Process Termination Messages . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.3.3 Argument Passing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.3.4 System Calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.3.5 Denying Writes to Executables. . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.4 FAQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.4.1 Argument Passing FAQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.4.2 System Calls FAQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.5 80x86 Calling Convention . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.5.1 Program Startup Details . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.5.2 System Call Details . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4 Project 3: Virtual M emo ry . . . . . . . . . . . . . . . . 38
4.1 Background . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4.1.1 Source Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4.1.2 Memory Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4.1.2.1 Pages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4.1.2.2 Frames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.1.2.3 Page Tables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.1.2.4 Swap Slots. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.1.3 Resource Management Overview . . . . . . . . . . . . . . . . . . . . . . . . 40
4.1.4 Managing the Supplemental Page Table . . . . . . . . . . . . . . . . . 41
4.1.5 Managing the Frame Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.1.5.1 Accessed and Dirty Bits . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.1.6 Managing the Swap Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.1.7 Managing Memory Mapped Files . . . . . . . . . . . . . . . . . . . . . . . 43
4.2 Suggested Order of Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.3 Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.3.1 Design Document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.3.2 Paging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.3.3 Stack Growth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.3.4 Memory Mapped Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.4 FAQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5 Project 4: File Systems . . . . . . . . . . . . . . . . . . . 49
5.1 Background . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.1.1 New Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.1.2 Testing File System Persistence . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.2 Suggested Order of Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.3 Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.3.1 Design Document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.3.2 Indexed and Extensible Files . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
5.3.3 Subdirectories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
5.3.4 Buffer Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5.3.5 Synchronization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5.4 FAQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
5.4.1 Indexed Files FAQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
iv
5.4.2 Subdirectories FAQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
5.4.3 Buffer Cache FAQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Appendix A Reference Guide . . . . . . . . . . . . . . . 5 7
A.1 Loading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
A.1.1 The Loader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
A.1.2 Kernel Initialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
A.2 Threads. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
A.2.1 struct thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
A.2.2 Thread Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
A.2.3 Thread Switching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
A.3 Synchronization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
A.3.1 Disabling Interrupts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
A.3.2 Semaphores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
A.3.3 Locks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
A.3.4 Monitors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
A.3.4.1 Monitor Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
A.3.5 Optimization Barriers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
A.4 Interrupt Handling. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
A.4.1 Interrupt Infrastructure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
A.4.2 Internal Interrupt Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
A.4.3 External Interrupt Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
A.5 Memory Allocation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
A.5.1 Page Allocator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
A.5.2 Block Allocator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
A.6 Virtual Addresses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
A.7 Page Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
A.7.1 Creation, Destruction, and Activation. . . . . . . . . . . . . . . . . . . 77
A.7.2 Inspection and Updates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
A.7.3 Accessed and Dirty Bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
A.7.4 Page Table Details . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
A.7.4.1 Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
A.7.4.2 Page Table Entry Format . . . . . . . . . . . . . . . . . . . . . . . . . 81
A.7.4.3 Page Directory Entry Format . . . . . . . . . . . . . . . . . . . . . . 82
A.8 Hash Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
A.8.1 Data Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
A.8.2 Basic Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
A.8.3 Search Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
A.8.4 Iteration Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
A.8.5 Hash Table Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
A.8.6 Auxiliary Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
A.8.7 Synchronization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
剩余127页未读,继续阅读
weixin_45699536
- 粉丝: 5
- 资源: 45
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于springboot+vue实现的在线考试系统+源代码+文档
- RTL8723DS 2022 版本 Linux驱动,android驱动 支持4.0-10x
- 要玩NDS的遊戲,必須要先下載三個bios檔案到你的檔案資料夾
- 各类型数据库4月排名,基于排名网站数据爬虫json结果
- 基于springboot+vue实现的在线考试系统+源代码+文档
- 淮北市杜集区人才补贴+生活补贴
- JAVA-JSP技术文档
- 课内实验02-决策表(共享单车月卡).docx
- 基于【React + Node+SpringBoot】疫情数据查看系统的设计与实现【源码+lw+部署+讲解】
- 基于【React + Node】云课堂系统设计与实现【源码+lw+部署+讲解】
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0