본문 바로가기

(ebook) Computer Systems: A Programmer's Perspective, Global Edition 3rd Edition > eBook

본문 바로가기

회원메뉴

쇼핑몰 검색

회원로그인

회원가입

오늘 본 상품 1

  • (ebook) Computer Systems: A Programmer's Perspective, Global Edition 3rd Edition
    (ebook) Co 48,000
(ebook) Computer Systems: A Programmer's Perspective, Global Edition 3rd Edition > eBook
메인으로

(ebook) Computer Systems: A Programmer's Perspective, Global Edition 3rd Edition 요약정보 및 구매

ebook

저자 : Randal E. Bryant; David R. O'Hallaron

상품 선택옵션 0 개, 추가옵션 0 개

위시리스트0
판매가격 48,000원
출판사 Pearson
발행일 2019
ISBN 9781292101774
페이지1120 pages
언어 ENG
포인트 0점
배송비결제 주문시 결제

선택된 옵션

  • (ebook) Computer Systems: A Programmer's Perspective, Global Edition 3rd Edition
    +0원
위시리스트
  • 상품 정보

    상품 상세설명


    For courses in Computer Science and Programming Computer systems: A Programmer’s Perspective explains the underlying elements common among all computer systems and how they affect general application performance. Written from the programmer’s perspective, this book strives to teach students how understanding basic elements of computer systems and executing real practice can lead them to create better programs. Spanning across computer science themes such as hardware architecture, the operating system, and systems software, the 3rd Edition serves as a comprehensive introduction to programming. This book strives to create programmers who understand all elements of computer systems and will be able to engage in any application of the field--from fixing faulty software, to writing more capable programs, to avoiding common flaws. It lays the groundwork for students to delve into more intensive topics such as computer architecture, embedded systems, and cybersecurity. This book focuses on systems that execute an x86-64 machine code, and recommends that students have access to a Linux system for this course. Students should have basic familiarity with C or C .   The full text downloaded to your computer With eBooks you can: search for key concepts, words and phrases make highlights and notes as you study share your notes with friends eBooks are downloaded to your computer and accessible either offline through the Bookshelf (available as a free download), available online and also via the iPad and Android apps. Upon purchase, you'll gain instant access to this eBook. Time limit The eBooks products do not have an expiry date. You will continue to access your digital ebook products whilst you have your Bookshelf installed. 

    상품 정보 고시

  • 사용후기

    1. Dedication
    2. Contents
    3. Preface
    4. About the Authors
    5. Chapter 1: A Tour of Computer Systems
    6. 1.1: Information Is Bits + Context
    7. 1.2: Programs Are Translated by Other Programs into Different Forms
    8. 1.3: It Pays to Understand How Compilation Systems Work
    9. 1.4: Processors Read and Interpret Instructions Stored in Memory
    10. 1.4.1: Hardware Organization of a System
    11. 1.4.2: Running the hello Program
    12. 1.5: Caches Matter
    13. 1.6: Storage Devices Form a Hierarchy
    14. 1.7: The Operating System Manages the Hardware
    15. 1.7.1: Processes
    16. 1.7.2: Threads
    17. 1.7.3: Virtual Memory
    18. 1.7.4: Files
    19. 1.8: Systems Communicate with Other Systems Using Networks
    20. 1.9: Important Themes
    21. 1.9.1: Amdahl’s Law
    22. 1.9.2: Concurrency and Parallelism
    23. 1.9.3: The Importance of Abstractions in Computer Systems
    24. 1.10: Summary
    25. Bibliographic Notes
    26. Solutions to Practice Problems
    27. Part I: Program Structure and Execution
    28. Chapter 2: Representing and Manipulating Information
    29. 2.1: Information Storage
    30. 2.1.1: Hexadecimal Notation
    31. 2.1.2: Data Sizes
    32. 2.1.3: Addressing and Byte Ordering
    33. 2.1.4: Representing Strings
    34. 2.1.5: Representing Code
    35. 2.1.6: Introduction to Boolean Algebra
    36. 2.1.7: Bit-Level Operations in C
    37. 2.1.8: Logical Operations in C
    38. 2.1.9: Shift Operations in C
    39. 2.2: Integer Representations
    40. 2.2.1: Integral Data Types
    41. 2.2.2: Unsigned Encodings
    42. 2.2.3: Two’s-Complement Encodings
    43. 2.2.4: Conversions between Signed and Unsigned
    44. 2.2.5: Signed versus Unsigned in C
    45. 2.2.6: Expanding the Bit Representation of a Number
    46. 2.2.7: Truncating Numbers
    47. 2.2.8: Advice on Signed versus Unsigned
    48. 2.3: Integer Arithmetic
    49. 2.3.1: Unsigned Addition
    50. 2.3.2: Two’s-Complement Addition
    51. 2.3.3: Two’s-Complement Negation
    52. 2.3.4: Unsigned Multiplication
    53. 2.3.5: Two’s-Complement Multiplication
    54. 2.3.6: Multiplying by Constant
    55. 2.3.7: Dividing by Powers of 2
    56. 2.3.8: Final Thoughts on Integer Arithmetic
    57. 2.4: Floating Point
    58. 2.4.1: Fractional Binary Numbers
    59. 2.4.2: IEEE Floating-Point Representation
    60. 2.4.3: Example Numbers
    61. 2.4.4: Rounding
    62. 2.4.5: Floating-Point Operations
    63. 2.4.6: Floating Point in C
    64. 2.5: Summary
    65. Bibliographic Notes
    66. Homework Problems
    67. Solutions to Practice Problems
    68. Chapter 3: Machine-Level Representation of Program
    69. 3.1: A Historical Perspective
    70. 3.2: Program Encodings
    71. 3.2.1: Machine-Level Code
    72. 3.2.2: Code Examples
    73. 3.2.3: Notes on Formatting
    74. 3.3: Data Formats
    75. 3.4: Accessing Information
    76. 3.4.1: Operand Specifiers
    77. 3.4.2: Data Movement Instructions
    78. 3.4.3: Data Movement Example
    79. 3.4.4: Pushing and Popping Stack Data
    80. 3.5: Arithmetic and Logical Operations
    81. 3.5.1: Load Effective Address
    82. 3.5.2: Unary and Binary Operations
    83. 3.5.3: Shift Operations
    84. 3.5.4: Discussion
    85. 3.5.5: Special Arithmetic Operations
    86. 3.6: Control
    87. 3.6.1: Condition Codes
    88. 3.6.2: Accessing the Condition Codes
    89. 3.6.3: Jump Instructions
    90. 3.6.4: Jump Instruction Encodings
    91. 3.6.5: Implementing Conditional Branches with Conditional Control
    92. 3.6.6: Implementing Conditional Branches with Conditional Moves
    93. 3.6.7: Loop
    94. 3.6.8: Switch Statements
    95. 3.7: Procedures
    96. 3.7.1: The Run-Time Stack
    97. 3.7.2: Control Transfer
    98. 3.7.3: Data Transfer
    99. 3.7.4: Local Storage on the Stack
    100. 3.7.5: Local Storage in Registers
    101. 3.7.6: Recursive Procedures
    102. 3.8: Array Allocation and Access
    103. 3.8.1: Basic Principles
    104. 3.8.2: Pointer Arithmetic
    105. 3.8.3: Nested Arrays
    106. 3.8.4: Fixed-Size Arrays
    107. 3.8.5: Variable-Size Arrays
    108. 3.9: Heterogeneous Data Structure
    109. 3.9.1: Structures
    110. 3.9.2: Unions
    111. 3.9.3: Data Alignment
    112. 3.10: Combining Control and Data in Machine-Level Programs
    113. 3.10.1: Understanding Pointers
    114. 3.10.2: Life in the RealWorld: Using the GDB Debugger
    115. 3.10.3: Out-of-Bounds Memory References and Buffer Overflow
    116. 3.10.4: Thwarting Buffer Overflow Attacks
    117. 3.10.5: Supporting Variable-Size Stack Frames
    118. 3.11: Floating-Point Code
    119. 3.11.1: Floating-Point Movement and Conversion Operations
    120. 3.11.2: Floating-Point Code in Procedures
    121. 3.11.3: Floating-Point Arithmetic Operations
    122. 3.11.4: Defining and Using Floating-Point Constants
    123. 3.11.5: Using Bitwise Operations in Floating-Point Code
    124. 3.11.6: Floating-Point Comparison Operations
    125. 3.11.7: Observations about Floating-Point Code
    126. 3.12: Summary
    127. Bibliographic Notes
    128. Homework Problems
    129. Solutions to Practice Problems
    130. Chapter 4: Processor Architecture
    131. 4.1: The Y86-64 Instruction Set Architecture
    132. 4.1.1: Programmer-Visible State
    133. 4.1.2: Y86-64 Instructions
    134. 4.1.3: Instruction Encoding
    135. 4.1.4: Y86-64 Exceptions
    136. 4.1.5: Y86-64 Programs
    137. 4.1.6: Some Y86-64 Instruction Details
    138. 4.2: Logic Design and the Hardware Control Language HCL
    139. 4.2.1: Logic Gates
    140. 4.2.2: Combinational Circuits and HCL Boolean Expressions
    141. 4.2.3: Word-Level Combinational Circuits and HCL Integer Expressions
    142. 4.2.4: Set Membership
    143. 4.2.5: Memory and Clocking
    144. 4.3: Sequential Y86-64 Implementations
    145. 4.3.1: Organizing Processing into Stages
    146. 4.3.2: SEQ Hardware Structure
    147. 4.3.3: SEQ Timing
    148. 4.3.4: SEQ Stage Implementations
    149. 4.4: General Principles of Pipelining
    150. 4.4.1: Computational Pipelines
    151. 4.4.2: A Detailed Look at Pipeline Operation
    152. 4.4.3: Limitations of Pipelining
    153. 4.4.4: Pipelining a System with Feedback
    154. 4.5: Pipelined Y86-64 Implementations
    155. 4.5.1: SEQ+: Rearranging the Computation Stages
    156. 4.5.2: Inserting Pipeline Registers
    157. 4.5.3: Rearranging and Relabeling Signals
    158. 4.5.4: Next PC Prediction
    159. 4.5.5: Pipeline Hazards
    160. 4.5.6: Exception Handling
    161. 4.5.7: PIPE Stage Implementations
    162. 4.5.8: Pipeline Control Logic
    163. 4.5.9: Performance Analysis
    164. 4.5.10: Unfinished Business
    165. 4.6: Summary
    166. 4.6.1: Y86-64 Simulators
    167. Bibliographic Notes
    168. Homework Problems
    169. Solutions to Practice Problems
    170. Chapter 5: Optimizing Program Performance
    171. 5.1: Capabilities and Limitations of Optimizing Compilers
    172. 5.2: Expressing Program Performance
    173. 5.3: Program Example
    174. 5.4: Eliminating Loop Inefficiencies
    175. 5.5: Reducing Procedure Calls
    176. 5.6: Eliminating Unneeded Memory References
    177. 5.7: Understanding Modern Processors
    178. 5.7.1: Overall Operation
    179. 5.7.2: Functional Unit Performance
    180. 5.7.3: An Abstract Model of Processor Operation
    181. 5.8: Loop Unrolling
    182. 5.9: Enhancing Parallelism
    183. 5.9.1: Multiple Accumulators
    184. 5.9.2: Reassociation Transformation
    185. 5.10: Summary of Results for Optimizing Combining Code
    186. 5.11: Some Limiting Factors
    187. 5.11.1: Register Spilling
    188. 5.11.2: Branch Prediction and Misprediction Penalties
    189. 5.12: Understanding Memory Performance
    190. 5.12.1: Load Performance
    191. 5.12.2: Store Performance
    192. 5.13: Life in the Real World: Performance Improvement Techniques
    193. 5.14: Identifying and Eliminating Performance Bottlenecks
    194. 5.14.1: Program Profiling
    195. 5.14.2: Using a Profiler to Guide Optimization
    196. 5.15: Summary
    197. Bibliographic Notes
    198. Homework Problems
    199. Solutions to Practice Problems
    200. Chapter 6: The Memory Hierarchy
    201. 6.1: Storage Technologie
    202. 6.1.1: Random Access Memory
    203. 6.1.2: Disk Storage
    204. 6.1.3: Solid State Disks
    205. 6.1.4: Storage Technology Trends
    206. 6.2: Locality
    207. 6.2.1: Locality of References to Program Data
    208. 6.2.2: Locality of Instruction Fetches
    209. 6.2.3: Summary of Locality
    210. 6.3: The Memory Hierarchy
    211. 6.3.1: Caching in the Memory Hierarchy
    212. 6.3.2: Summary of Memory Hierarchy Concepts
    213. 6.4: Cache Memories
    214. 6.4.1: Generic Cache Memory Organization
    215. 6.4.2: Direct-Mapped Caches
    216. 6.4.3: Set Associative Caches
    217. 6.4.4: Fully Associative Caches
    218. 6.4.5: Issues with Writes
    219. 6.4.6: Anatomy of a Real Cache Hierarchy
    220. 6.4.7: Performance Impact of Cache Parameters
    221. 6.5: Writing Cache-Friendly Code
    222. 6.6: Putting It Together: The Impact of Caches on Program Performance
    223. 6.6.1: The Memory Mountain
    224. 6.6.2: Rearranging Loops to Increase Spatial Locality
    225. 6.6.3: Exploiting Locality in Your Programs
    226. 6.7: Summary
    227. Bibliographic Notes
    228. Homework Problems
    229. Solutions to Practice Problems
    230. Part II: Running Programs on a System
    231. Chapter 7: Linking
    232. 7.1: Compiler Drivers
    233. 7.2: Static Linking
    234. 7.3: Object Files
    235. 7.4: Relocatable Object Files
    236. 7.5: Symbols and Symbol Tables
    237. 7.6: Symbol Resolution
    238. 7.6.1: How Linkers Resolve Duplicate Symbol Names
    239. 7.6.2: Linking with Static Libraries
    240. 7.6.3: How Linkers Use Static Libraries to Resolve References
    241. 7.7: Relocation
    242. 7.7.1: Relocation Entries
    243. 7.7.2: Relocating Symbol References
    244. 7.8: Executable Object Files
    245. 7.9: Loading Executable Object Files
    246. 7.10: Dynamic Linking with Shared Libraries
    247. 7.11: Loading and Linking Shared Libraries from Applications
    248. 7.12: Position-Independent Code (PIC)
    249. 7.13: Library Interpositioning
    250. 7.13.1: Compile-Time Interpositioning
    251. 7.13.2: Link-Time Interpositioning
    252. 7.13.3: Run-Time Interpositioning
    253. 7.14: Tools for Manipulating Object Files
    254. 7.15: Summary
    255. Bibliographic Notes
    256. Homework Problems
    257. Solutions to Practice Problems
    258. Chapter 8: Exceptional Control Flow
    259. 8.1: Exceptions
    260. 8.1.1: Exception Handling
    261. 8.1.2: Classes of Exceptions
    262. 8.1.3: Exceptions in Linux/x86-64 Systems
    263. 8.2: Processes
    264. 8.2.1: Logical Control Flow
    265. 8.2.2: Concurrent Flows
    266. 8.2.3: Private Address Space
    267. 8.2.4: User and Kernel Modes
    268. 8.2.5: Context Switches
    269. 8.3: System Call Error Handling
    270. 8.4: Process Control
    271. 8.4.1: Obtaining Process IDs
    272. 8.4.2: Creating and Terminating Processes
    273. 8.4.3: Reaping Child Processes
    274. 8.4.4: Putting Processes to Sleep
    275. 8.4.5: Loading and Running Programs
    276. 8.4.6: Using fork and execve to Run Programs
    277. 8.5: Signals
    278. 8.5.1: Signal Terminology
    279. 8.5.2: Sending Signals
    280. 8.5.3: Receiving Signals
    281. 8.5.4: Blocking and Unblocking Signals
    282. 8.5.5: Writing Signal Handlers
    283. 8.5.6: Synchronizing Flows to Avoid Nasty Concurrency Bugs
    284. 8.5.7: ExplicitlyWaiting for Signals
    285. 8.6: Nonlocal Jumps
    286. 8.7: Tools for Manipulating Processes
    287. 8.8: Summary
    288. Bibliographic Notes
    289. Homework Problems
    290. Solutions to Practice Problems
    291. Chapter 9: Virtual Memory
    292. 9.1: Physical and Virtual Addressing
    293. 9.2: Address Spaces
    294. 9.3: VM as a Tool for Caching
    295. 9.3.1: DRAM Cache Organization
    296. 9.3.2: Page Tables
    297. 9.3.3: Page Hits
    298. 9.3.4: Page Faults
    299. 9.3.5: Allocating Pages
    300. 9.3.6: Locality to the Rescue Again
    301. 9.4: VM as a Tool for Memory Management
    302. 9.5: VM as a Tool for Memory Protection
    303. 9.6: Address Translation
    304. 9.6.1: Integrating Caches and VM
    305. 9.6.2: Speeding Up Address Translation with a TLB
    306. 9.6.3: Multi-Level Page Tables
    307. 9.6.4: Putting It Together: End-to-End Address Translation
    308. 9.7: Case Study: The Intel Core i7/Linux Memory System
    309. 9.7.1: Core i7 Address Translation
    310. 9.7.2: Linux Virtual Memory System
    311. 9.8: Memory Mapping
    312. 9.8.1: Shared Objects Revisited
    313. 9.8.2: The fork Function Revisited
    314. 9.8.3: The execve Function Revisited
    315. 9.8.4: User-Level Memory Mapping with the mmap Function
    316. 9.9: Dynamic Memory Allocation
    317. 9.9.1: The malloc and free Functions
    318. 9.9.2: Why Dynamic Memory Allocation?
    319. 9.9.3: Allocator Requirements and Goals
    320. 9.9.4: Fragmentation
    321. 9.9.5: Implementation Issues
    322. 9.9.6: Implicit Free Lists
    323. 9.9.7: Placing Allocated Blocks
    324. 9.9.8: Splitting Free Blocks
    325. 9.9.9: Getting Additional Heap Memory
    326. 9.9.10: Coalescing Free Blocks
    327. 9.9.11: Coalescing with Boundary Tags
    328. 9.9.12: Putting It Together: Implementing a Simple Allocator
    329. 9.9.13: Explicit Free Lists
    330. 9.9.14: Segregated Free Lists
    331. 9.10: Garbage Collection
    332. 9.10.1: Garbage Collector Basics
    333. 9.10.2: Mark&Sweep Garbage Collectors
    334. 9.10.3: Conservative Mark&Sweep for C Programs
    335. 9.11: Common Memory-Related Bugs in C Programs
    336. 9.11.1: Dereferencing Bad Pointers
    337. 9.11.2: Reading Uninitialized Memory
    338. 9.11.3: Allowing Stack Buffer Overflows
    339. 9.11.4: Assuming That Pointers and the Objects They Point to Are the Same Size
    340. 9.11.5: Making Off-by-One Errors
    341. 9.11.6: Referencing a Pointer Instead of the Object It Points To
    342. 9.11.7: Misunderstanding Pointer Arithmetic
    343. 9.11.8: Referencing Nonexistent Variables
    344. 9.11.9: Referencing Data in Free Heap Blocks
    345. 9.11.10: Introducing Memory Leaks
    346. 9.12: Summary
    347. Bibliographic Notes
    348. Homework Problems
    349. Solutions to Practice Problems
    350. Part III: Interaction and Communication between Programs
    351. Chapter 10: System-Level I/O
    352. 10.1: Unix I/O
    353. 10.2: Files
    354. 10.3: Opening and Closing Files
    355. 10.4: Reading and Writing Files
    356. 10.5: Robust Reading and Writing with the Rio Package
    357. 10.5.1: Rio Unbuffered Input and Output Functions
    358. 10.5.2: Rio Buffered Input Functions
    359. 10.6: Reading File Metadata
    360. 10.7: Reading Directory Contents
    361. 10.8: Sharing Files
    362. 10.9: I/O Redirection
    363. 10.10: Standard I/O
    364. 10.11: Putting It Together: Which I/O Functions Should I Use?
    365. 10.12: Summary
    366. Bibliographic Notes
    367. Homework Problems
    368. Solutions to Practice Problems
    369. Chapter 11: Network Programming
    370. 11.1: The Client-Server Programming Model
    371. 11.2: Networks
    372. 11.3: The Global IP Internet
    373. 11.3.1: IP Addresses
    374. 11.3.2: Internet Domain Names
    375. 11.3.3: Internet Connections
    376. 11.4: The Sockets Interface
    377. 11.4.1: Socket Address Structures
    378. 11.4.2: The socket Function
    379. 11.4.3: The connect Function
    380. 11.4.4: The bind Function
    381. 11.4.5: The listen Function
    382. 11.4.6: The accept Function
    383. 11.4.7: Host and Service Conversion
    384. 11.4.8: Helper Functions for the Sockets Interface
    385. 11.4.9: Example Echo Client and Server
    386. 11.5: Web Servers
    387. 11.5.1: Web Basics
    388. 11.5.2: Web Content
    389. 11.5.3: HTTP Transactions
    390. 11.5.4: Serving Dynamic Content
    391. 11.6: Putting It Together: The Tiny Web Server
    392. 11.7: Summary
    393. Bibliographic Notes
    394. Homework Problems
    395. Solutions to Practice Problems
    396. Chapter 12: Concurrent Programming
    397. 12.1: Concurrent Programming with Processes
    398. 12.1.1: A Concurrent Server Based on Processes
    399. 12.1.2: Pros and Cons of Processes
    400. 12.2: Concurrent Programming with I/O Multiplexing
    401. 12.2.1: A Concurrent Event-Driven Server Based on I/O Multiplexing
    402. 12.2.2: Pros and Cons of I/O Multiplexing
    403. 12.3: Concurrent Programming with Threads
    404. 12.3.1: Thread Execution Model
    405. 12.3.2: Posix Threads
    406. 12.3.3: Creating Threads
    407. 12.3.4: Terminating Threads
    408. 12.3.5: Reaping Terminated Threads
    409. 12.3.6: Detaching Threads
    410. 12.3.7: Initializing Threads
    411. 12.3.8: A Concurrent Server Based on Threads
    412. 12.4: Shared Variables in Threaded Programs
    413. 12.4.1: Threads Memory Model
    414. 12.4.2: Mapping Variables to Memory
    415. 12.4.3: Shared Variables
    416. 12.5: Synchronizing Threads with Semaphores
    417. 12.5.1: Progress Graphs
    418. 12.5.2: Semaphores
    419. 12.5.3: Using Semaphores for Mutual Exclusion
    420. 12.5.4: Using Semaphores to Schedule Shared Resources
    421. 12.5.5: Putting It Together: A Concurrent Server Based on Prethreading
    422. 12.6: Using Threads for Parallelism
    423. 12.7: Other Concurrency Issues
    424. 12.7.1: Thread Safety
    425. 12.7.2: Reentrancy
    426. 12.7.3: Using Existing Library Functions in Threaded Programs
    427. 12.7.4: Races
    428. 12.7.5: Deadlocks
    429. 12.8: Summary
    430. Bibliographic Notes
    431. Homework Problems
    432. Solutions to Practice Problems
    433. Appendix A: Error Handling
    434. A.1: Error Handling in Unix Systems
    435. A.2: Error-Handling Wrappers
    436. References
    437. Index
    438. Back Cover
    Read More
  • 상품문의

    등록된 상품문의

    상품문의가 없습니다.

  • 반품/교환 방법

    "마이페이지 > 주문조회 > 반품/교환신청", 1:1상담>반품/교환 또는 고객센터(031-948-8090)

    반품/교환 가능 기간

    변심, 구매착오의 경우 수령 후 10일 이내

    전자책 관련(eBook 등)은 반품이 불가합니다.

    파본 등 상품결함 시 '문제점 발견 후 30일' 이내

    반품/교환 비용

    제주도 및 도서산간 지역 발송은 추가비용 발생되며, 비용은 고객부담(제주도 추가비용 4,000원)

    변심 혹은 구매착오의 경우에만 반송료 고객 부담(왕복 배송비 고객 부담)

    * 해외 직배송도서 취소수수료 : 수입제반비용(국내 까지의 운송비, 관세사비, 보세창고료, 내륙 운송비, 통관비 등)에 따른 비용

    반품/교환 불가 사유

    해외 직배송도서는 반품이 불가합니다.

    사용, 파본, 포장개봉에 의해 상품결함 등 상품가치가 현저히 감소한 상품

    전자책 관련(eBook 등)은 반품이 불가합니다.

    소비자 피해보상

    환불지연에 따른 배상

    - 상품의 불량에 의한 반품, 교환, A/S, 환불, 품질보증 및 피해보상 등에 관한 사항은 소비자분쟁해결기준 (공정거래위원회 고시)에 준하여 처리됨

    - 대금 환불 및 환불 지연에 따른 배상금 지급 조건, 절차 등은 전자상거래 등에서의 소비자 보호에 관한 법률에 따라 처리함

선택된 옵션

  • (ebook) Computer Systems: A Programmer's Perspective, Global Edition 3rd Edition
    +0원

관련도서