Học kiến ​​trúc máy tính như một lập trình viên [đóng]


12

Tôi thường chạy ngang qua các bậc thầy ở SO và những nơi khác (người hướng dẫn, tác giả sách, v.v.) sẽ nói điều gì đó dọc theo dòng "This will cause alignment issues"hoặc các mẩu tin cấp thấp khác.

Tôi muốn tìm hiểu về tất cả các mẩu tin này relevantđể lập trình. Bây giờ thông thường khi tôi thấy sách cấp thấp (ví dụ sách kiến ​​trúc máy tính), chúng ở cấp độ quá thấp và hướng tới những người có lĩnh vực chính là kiến ​​trúc máy tính chứ không phải thiết kế phần mềm.

Bạn có đề xuất cho những cuốn sách đi qua những thứ cấp thấp có liên quan đến lập trình viên không?


4
Bạn muốn "những cuốn sách đi qua những thứ cấp thấp" nhưng bạn không muốn những cuốn sách quá "cấp độ thấp"? Học kiến ​​trúc cho một số lập trình viên có thể cực kỳ thuận lợi. Tương tự như một nhà phát triển web hiểu về ngăn xếp TCP / IP. Nó không bao giờ là tất cả hữu ích cho đến khi bạn THỰC SỰ cần nó. \
Chris

1
@Chris: Ý tôi là "trình độ thấp cho lập trình viên" ... về mặt kỹ thuật chúng ta có thể đi xa đến mức kiến ​​trúc CPU đầy đủ, và không nghi ngờ gì nữa, nó sẽ hữu ích vào một ngày nào đó, nhưng xem xét tất cả chúng ta có giới hạn thời gian, một cuốn sách dạy những thứ cấp thấp mà tất cả các lập trình viên nên biết sẽ hoàn hảo.
Samaursa

Trong trường hợp đó, bất kỳ cuốn sách giới thiệu nào sẽ đưa bạn đi đúng hướng, nơi bạn đưa nó sau đó là lựa chọn của bạn dựa trên nhu cầu hoặc mong muốn.
Chris

Một người lái xe ô tô với hộp số tự động sẽ có lợi từ việc biết chiếc xe đó là gì và cách thức hoạt động trong khi lái xe. Tôi tin rằng bạn trở thành một lập trình viên tốt hơn bằng cách học lập trình ít nhất một chút, bằng ngôn ngữ lắp ráp, giống như cách tôi nghĩ bạn trở thành người lái xe tốt hơn khi bạn học "lái gậy".
Warren P

Câu trả lời:


16

Một tập tốt đẹp của cuốn sách cho chính xác mục đích này là Randall Hyde của "Write lớn Code" loạt ( Vol.1 Vol 2. ): Mô tả kiến trúc máy một cách rõ ràng từ quan điểm của những gì bạn cần biết để viết mã hiệu quả trong các ngôn ngữ cấp cao .


Những ngôn ngữ cấp cao này sẽ áp dụng cho? Điều này có bao gồm Python, JavaScript, C #, Scala chẳng hạn?
Công việc

@Job - Tôi chưa đọc sách, nhưng tôi muốn nói rằng nó sẽ áp dụng cho bất kỳ thứ gì có thể / có thể tận dụng những thứ như xử lý đa luồng và xử lý 64 bit. Chạy các ngôn ngữ bạn đã đề cập có thể giúp kiến ​​thức đó trở nên hữu ích (đặc biệt nếu bạn cũng là quản trị viên máy chủ hoặc chạy các ngôn ngữ đó bên ngoài môi trường web).
Shauna

Hyde là một bậc thầy về ngôn ngữ hội, do đó, đối với anh ta "cấp cao" chủ yếu có nghĩa là C. Nhưng nội dung của anh ta cũng quan trọng đối với người dùng các ngôn ngữ thậm chí cao hơn; Chuỗi, cuộc gọi thủ tục, vv thực sự không khác nhau ở cấp độ phần cứng, cho dù chúng được khai báo bằng C hay bằng Python.
Kilian Foth

Tôi nghĩ rằng bất kỳ ngôn ngữ được biên dịch riêng nào (C, C ++, Pascal, Objective-C) cũng cho phép một chút ngôn ngữ lắp ráp, sẽ có lợi nhất từ ​​cuốn sách này. Tuy nhiên, những người sử dụng Python và viết các phần mở rộng cho nó bằng C hoặc thậm chí những người sử dụng java và hoàn toàn không sử dụng bất kỳ phương thức gốc nào, có thể suy nghĩ nhiều hơn về chi phí của những gì họ đang làm và làm thế nào để thực hiện công việc của họ một cách hiệu quả trong nền tảng mà họ đang sử dụng.
Warren P

Mặc dù tôi chưa đọc sách nhưng tôi sẽ chọn câu trả lời này là chính xác dựa trên đánh giá / tóm tắt của cuốn sách.
Samaursa

6

Đáng buồn thay, tôi không biết một hiện đại tương đương với Bộ vi xử lý: Quan điểm của lập trình viên của R. Dewar. Thiết kế gần nhất mà tôi biết là Tổ chức và Thiết kế máy tính, Phiên bản thứ tư: Giao diện phần cứng / phần mềm của David A. Patterson và John L. Hennessy, nhưng tôi không chắc rằng bạn sẽ không xem nó ở mức quá thấp; bạn chắc chắn sẽ làm điều đó cho công việc khác của họ, Kiến trúc máy tính, một cách tiếp cận định lượng.

Trực tuyến, http://www-uxsup.csx.cam.ac.uk/cifts/Arch architecture / c thuyết.pdf này có thể sẽ cung cấp cho bạn những gì bạn muốn.


Liên kết đến pdf đã chết.
Ajay

5

Đối với các nền tảng x86, lấy một bản sao của hướng dẫn sử dụng bộ xử lý IA-32 và Intel 64 của Intel . Hướng dẫn tham khảo tối ưu hóa thảo luận rất nhiều vấn đề này từ góc độ cấp thấp cho CPU Intel x86. AMD cũng có hướng dẫn sử dụng tương tự bao gồm các vấn đề tương tự.

Hầu hết các kiến ​​trúc CPU khác có hướng dẫn sử dụng tương tự thảo luận về các vấn đề hiệu suất. ( Ví dụ: ARMPowerPC .)


3

Tôi thấy "Kiến trúc máy tính: Cách tiếp cận định lượng" của Hennessy và Patterson ( liên kết Amazon ) là một cách tiếp cận rất mạnh mẽ và vững chắc đối với kiến ​​trúc máy tính, với khá nhiều nghiên cứu trường hợp liên quan trực tiếp đến lập trình.

Nó được sử dụng cho nhiều mức độ khác nhau trong một số khóa học kiến ​​trúc CS cấp đại học và sau đại học ở Mỹ.

Nó cũng nhận được một đánh giá tuyệt vời về Ars Technica một thời gian trước.


1
Trong khi tôi thích cuốn sách này - tôi sở hữu bốn phiên bản - nó được định hướng là kiến ​​trúc sư máy tính, không phải lập trình viên.
AProgrammer

3

Đây là những gì tôi đang sử dụng trong lớp Hệ thống máy tính của mình bây giờ Hệ thống máy tính: Quan điểm của lập trình viên (Phiên bản 2) và trong khi lớp học mới bắt đầu, tôi đã xem xét nó và thực sự thích nó.

Dưới đây là mô tả của cuốn sách:

Rất ít sinh viên học ngành khoa học máy tính hoặc kỹ thuật máy tính sẽ có cơ hội xây dựng một hệ thống máy tính. Mặt khác, hầu hết sinh viên sẽ được yêu cầu sử dụng và lập trình máy tính hàng ngày. Hệ thống máy tính: Quan điểm của lập trình viên giới thiệu các khái niệm quan trọng và lâu dài làm nền tảng cho các hệ thống máy tính bằng cách chỉ ra cách các ý tưởng này ảnh hưởng đến tính chính xác, hiệu suất và tiện ích của các chương trình ứng dụng. Cách tiếp cận thực hành của văn bản (bao gồm một bộ phòng thí nghiệm toàn diện) giúp sinh viên hiểu được hoạt động của hệ thống máy tính hiện đại và chuẩn bị cho các khóa học trong tương lai về các chủ đề hệ thống như trình biên dịch, kiến ​​trúc máy tính, hệ điều hành, và kết nối mạng.


Đó là một cuốn sách tuyệt vời !!
Armando

2

Đó là rất nhiều công việc, nhưng Ngôn ngữ lập trình thực dụng có thể chính xác là những gì bạn đang tìm kiếm. Cuốn sách về mặt lý thuyết chủ yếu là về phân tích cú pháp và biên dịch (vốn là kiến thức cần thiết cho những ai muốn thực sự học lập trình) và trong quá trình bạn sẽ tiếp tục tìm hiểu cách các khái niệm ngôn ngữ chuyển thành những gì đang diễn ra ở mức độ thấp. Tốt hơn nữa là bạn sẽ học được điều này cho nhiều ngôn ngữ cùng một lúc và bạn sẽ có thể so sánh và đối chiếu một cách thông minh cách các ngôn ngữ khác nhau thực sự hoạt động.

Tôi không thể khuyên bạn trừ khi bạn có thể dành vài tháng để thực sự học tài liệu. Nó không phải là thứ mà bạn vừa đọc lướt qua và đột nhiên giác ngộ. Nhưng nếu bạn nghiêm túc thì tôi đánh giá cao nó.


2

Nó có thể sai trong sinh học, nhưng trong khoa học máy tính, "ontogeny tóm tắt lại phylogeny" gần như vậy. Một tổng quan lịch sử về kiến ​​trúc máy tính kể từ những máy tính đầu tiên là một cách tuyệt vời để hiểu chủ đề kiến ​​trúc máy tính từ quan điểm của một lập trình viên; thiết kế máy tính là hầu hết tất cả các tinh chỉnh của thiết kế trước đó.

Đó là, tôi khuyên bạn nên nghiên cứu hoàn thành các thiết kế hệ thống cũ hơn, dựa trên những cuốn sách "kiến trúc máy tính" lý thuyết mà họ cung cấp cho bạn trong khoa học máy tính. Để thực sự hiểu thiết kế hệ thống, và thực hiện một công việc thực sự tuyệt vời khi viết phần mềm. Nắm bắt trực quan kiến ​​trúc của hệ thống máy tính đòi hỏi phải nắm vững nhiều khái niệm. Tôi nghĩ rằng nếu bạn bắt đầu quay lại khi các kiến ​​trúc máy tính dễ quản lý hơn về kích thước và phạm vi, bạn có thể khiến cha cùng mục tiêu viết mã tốt hơn.

(Nhân tiện, bộ sách "viết mã tuyệt vời" mà một người khác đã đề cập trông rất tuyệt, và tôi đã chỉnh sửa câu hỏi của mình để loại bỏ bất kỳ sự khao khát nào mà tôi đã thực hiện trước đây khi học từ một cuốn sách, bởi vì nó trông rất tuyệt! )

Một số điều dạy kiến ​​trúc máy tính thực sự tốt:

  1. Tôi thích chọn máy móc từ những năm 1980 làm nơi bắt đầu để giải thích và trình diễn mọi thứ với mọi người, vì đó là khi tôi bắt đầu sử dụng máy tính. Tôi đã sử dụng hướng dẫn tham khảo của lập trình viên 64 người, để cho mọi người thấy một nơi nhảy ra nơi kiến ​​thức về lập trình và kiến ​​thức về kiến ​​trúc máy tính gặp nhau. Với một cuốn sách như vậy, và có lẽ là một trình giả lập hàng hóa 64 chạy trên PC của bạn để bạn có thể thử đồ, bạn sẽ tìm hiểu về cách các hệ thống máy tính trong kiến ​​trúc máy tính cổ điển của thập niên 1980 được xây dựng. Theo quan điểm của tôi, một ví dụ cụ thể là một nơi tốt hơn để bắt đầu, hơn một tá mô hình lý thuyết đang thiếu các chi tiết trong thế giới thực làm cho mọi thứ hoạt động. Nếu bạn biết đăng ký là gì, ALU là gì, xe buýt là gì và đồng hồ là gì, và những hệ thống tín hiệu nào được sử dụng trong thiết kế cũ của những năm 1980, nó sẽ cung cấp cho bạn những nguyên tắc cơ bản mà bạn cần biết để hiểu một cái gì đó gần đây, như "kiến trúc cầu cát" của Intel. Trong lịch sử, hãy nhìn lại bản gốc, ví dụ tra cứu kiến ​​trúc "Von neumann", trên wikipedia.

  2. Tiến lên từ điểm đầu tiên của tôi một vài năm; Tìm hiểu về kiến ​​trúc IBM PC gốc, ngôn ngữ lắp ráp 8086 và bus ISA. Từ điều này và những hạn chế của nó, sự hiểu biết về CPU "Intel COre i7" chứa gì, và các bus PCI và PCI-e làm gì và tại sao bạn cần chúng, có thể tiến hành tự nhiên hơn. Kiến trúc PC ngày nay vẫn còn một chút "nôn nao" từ thiết kế PC gốc của IBM. Cách tải chương trình ban đầu (hệ điều hành) (khởi động) trên PC 2011 vẫn còn nợ rất nhiều di sản của PC IBM gốc và BIOS ROM của nó và các cài đặt CMOS của nó trong PC gốc.

  3. Sử dụng và sửa đổi bản dựng Linux được định cấu hình sẵn hoạt động trên một số thiết bị không phải PC được nhúng và bạn sẽ tìm hiểu rất nhiều về kiến ​​trúc máy tính nhúng, không chỉ kiến ​​trúc kỹ thuật, mà tại sao một số tính năng lại có ở đó. Một ví dụ đẹp có sẵn giá rẻ là TS-7200, có PC-104 đẹp (Bus Bus, như trong PC gốc). PC-104 (nhúng bus bus 16 bit tương thích với các máy tính IBM PC / AT 80286) là một cách tuyệt vời để một người không thiết kế bảng mạch xây dựng một hệ thống nhúng, vì các mô-đun có thể xếp chồng lên nhau. Bạn muốn thêm một số IO hoặc thiết bị ngoại vi? Chỉ cần xếp chồng lên một vài mô-đun. TS-7200 có lõi không x86 (cpu ARM9) có khả năng chạy cả endian lớn hoặc endian nhỏ. Nếu bạn chưa gặp phải "endianness" trong hành trình học kiến ​​trúc của mình, thì đó là một nơi tốt để bắt gặp nó.


0

Hầu hết các cuốn sách về ngôn ngữ lắp ráp sẽ thảo luận về các tính năng kiến ​​trúc có liên quan, nhưng thường chỉ dành cho kiến ​​trúc mà cuốn sách đang nhắm mục tiêu. Vì vậy, bạn sẽ nhận được thông tin về sự cố tràn bộ nhớ cache và các kỹ thuật lập bản đồ trang MMU, nhưng có lẽ không phải là bất cứ điều gì về tuổi thọ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.