Вивчення архітектури комп’ютера як програміста [закрито]


12

Я, як правило, перебігаю гуру в SO та інших місцях (інструктори, автори книг тощо), які б щось говорили по лінії "This will cause alignment issues"чи інші примхливості низького рівня.

Я хочу дізнатися про всі ці примхи, які relevantстосуються програмування. Зараз зазвичай, коли я бачу книги низького рівня (наприклад, книги з архітектури комп'ютерів), вони занадто низькі та спрямовані на людей, основна сфера інтересів яких - архітектура комп'ютера, а не дизайн програмного забезпечення.

Чи є у вас рекомендації щодо книг, які переглядають матеріали низького рівня, що стосуються програмістів?


4
Ви хочете "книги, які проходять через низький рівень", але ви не хочете, щоб книги були занадто "низькими"? Навчання архітектурі для деяких програмістів може бути надзвичайно вигідним. Аналогічно веб-розробнику, який розуміє стек TCP / IP. Це ніколи не є корисним, поки вам НЕ ПОТРІБНО потрібен. \
Кріс

1
@Chris: Що я мав на увазі, це "низький рівень для програмістів" ... технічно ми можемо перейти до повномасштабної CPU-архітектури, і, без сумніву, це стане в нагоді одного дня, але враховуючи, що всі ми маємо обмежений час, книга що вчить речі низького рівня, про які повинні знати всі програмісти , будуть ідеальними.
Самаурса

У такому випадку будь-яка вступна книга приведе вас у правильному напрямку, де ви її візьмете після цього - це ваш вибір, виходячи з потреби чи бажання.
Кріс

Хтось, хто керує автомобілем з автоматичною коробкою передач, отримує перевагу від того, щоб знати, що таке, і як це працює під час руху. Я вважаю, що ви стаєте кращим програмістом, навчившись хоч трішки програмувати мовою складання так само, як я думаю, що ви стаєте кращим водієм, коли навчитесь "керувати палицею".
Warren P

Відповіді:


16

Хороший набір книг саме для цієї мети серія Рендалла Хайд «Write Great Code» ( Т.1 Том 2. ): Опис архітектури машини явно з точки зору того , що вам потрібно знати , щоб писати ефективний код на мовах високого рівня .


До яких мов високого рівня це стосується? Чи буде це, наприклад, Python, JavaScript, C #, Scala?
Робота

@Job - Я не читав книги, але я б сказав, що це стосується будь-яких, які / могли б скористатися такими речами, як багатопотокова та 64-бітна обробка. Запуск згаданих вами мов, ймовірно, зробить ці знання корисними (особливо, якщо ви теж адміністратор сервера або використовуєте ці мови поза веб-середовищем).
Шауна

Хайд - гуру мовної асамблеї, тому для нього "високий рівень" здебільшого означає C. Але його вміст так само важливий для користувачів навіть вищих мов; Струни, виклики процедур тощо дійсно не настільки різняться на апаратному рівні, незалежно від того, декларовано вони на C або Python.
Кіліан Фот

Я думаю, що будь-яка рідна мова, що складений (C, C ++, Pascal, Objective-C), яка також дозволяє трохи використовувати мову монтажу, отримала б найбільшу користь від цієї книги. Однак люди, які використовують Python і пишуть розширення для нього в C, або навіть люди, які використовують Java і взагалі не використовують жодних власних методів, могли б трохи більше задуматися про вартість того, що вони роблять, і як ефективно виконувати свою роботу в межах платформи, яку вони використовують.
Warren P

Хоча я ще не читав книги, я виберу цю відповідь як правильну на основі відгуків / резюме книги.
Самаурса

6

На жаль, я не знаю сучасного еквівалента мікропроцесорів: погляд програміста Р. Девара. Найближче, про що я знаю, - організація та дизайн комп'ютерів, четверте видання: Інтерфейс апаратно-програмного забезпечення Девід А. Паттерсон та Джон Л. Хеннесі, але я не впевнений, що ви не вважатимете це занадто низьким рівнем; Ви точно будете робити це для свого іншого опусу, архітектури комп’ютерів, кількісного підходу.

В Інтернеті цей http://www-uxsup.csx.cam.ac.uk/courses/Architecture/course.pdf , можливо, дає вам те, що ви хочете.


Посилання на pdf невідомо.
ajay

5

Для платформ x86 візьміть копію посібників з процесорів IA-32 та Intel 64 для процесорів Intel . У посібнику з оптимізації обговорюється багато цих питань з низького рівня для процесорів Intel x86. AMD також має подібні посібники, які охоплюють ті самі проблеми.

Більшість інших архітектур процесора мають подібні посібники, які обговорюють проблеми продуктивності. ( Наприклад, ARM та PowerPC .)


3

Я вважаю, що «Архітектура комп’ютерів: кількісний підхід» Геннесі та Паттерсона ( посилання Amazon ) є дуже сильним і міцним підходом до архітектури комп’ютера, що має досить багато тематичних досліджень, які безпосередньо стосуються програмування.

Він використовується для різних курсів на декількох курсах архітектури CS в США та аспірантурі.

Також він отримав чудовий відгук про Ars Technica .


1
Хоча мені подобається ця книга - я є власником чотирьох видань - вона спрямована як архітектори комп'ютерів, а не програмісти.
AProgrammer

3

Це те, що я зараз використовую у своєму класі « Комп’ютерні системи» Комп'ютерні системи: Перспектива програміста (2-е видання), і поки клас тільки починався, я вивчив це і мені дуже подобається.

Ось опис книги:

Мало хто з студентів, які вивчають інформатику чи комп’ютерну техніку, коли-небудь матимуть можливість побудувати комп'ютерну систему. З іншого боку, від більшості студентів буде потрібно користуватися та програмувати комп'ютери майже щодня. Комп'ютерні системи: Перспектива програміста представляє важливі та стійкі концепції, що лежать в основі комп'ютерних систем, показуючи, як ці ідеї впливають на правильність, продуктивність та корисність прикладних програм. Технічний підхід до тексту (включаючи комплексний набір лабораторій) допомагає студентам зрозуміти функціонування сучасної комп'ютерної системи "під кришкою" та готує їх до майбутніх курсів із системних тем, таких як компілятори, архітектура комп'ютера, операційні системи, та створення мереж.


Це дивовижна книга !!
Армандо

2

Це багато роботи, але прагматика мови програмування може бути саме тим, що ви шукаєте. Книга теоретично здебільшого стосується розбору та компіляції (що є важливим знанням для тих, хто хоче по-справжньому вивчити програмування), і в цьому процесі ви дізнаєтесь, як поняття мови перетворюють на те, що відбувається на низькому рівні. Ще краще, ви дізнаєтесь це для багатьох мов одночасно, і ви зможете інтелектуально порівняти та порівняти, як працюють різні мови.

Я не можу рекомендувати його, якщо ви не зможете присвятити кілька місяців фактичному вивченню матеріалу. Це не такі речі, які ви просто скупіте і раптом просвітлені. Але якщо ви серйозно, то настійно рекомендую.


2

Це може бути помилковим у біології, але в інформатиці "онтогенез рекапітулює філогенез" майже майже. Історичний огляд архітектури комп’ютерів з перших комп’ютерів - це чудовий спосіб зрозуміти тему комп'ютерної архітектури з точки зору програміста; комп'ютерні конструкції - це майже всі уточнення попередніх конструкцій.

Тобто, я рекомендую вивчити повністю працюючі старі дизайни системи, засновані на теоретичних книгах «архітектури комп’ютера», які вони дають вам з інформатики. Справді зрозуміти дизайн систем і зробити справді чудову роботу над написанням програмного забезпечення. Інтуїтивне розуміння архітектури комп'ютерних систем вимагає оволодіння багатьма концепціями. Я думаю, якщо ви почнете ще тоді, коли архітектури комп’ютерів були більш керованими за розміром та масштабом, ви могли б змусити батька в своїй меті написати кращий код.

(До речі, ця серія книг "Пишіть великий код", яку згадував інший хлопець, виглядає чудово, і я відредагував своє запитання, щоб видалити будь-які роздуми, які я раніше кидав на навчання з книги, тому що це виглядає чудово! )

Деякі речі, які дуже добре навчають архітектуру комп’ютера:

  1. Мені подобається вибирати машини з 1980-х років як вихідні місця для пояснення та демонстрації речей людям, адже саме тоді я почав користуватися комп’ютерами. Я використав довідник програміста commodore 64, щоб показати людям місце, де знаходяться місця, де знаходяться програми програмування та знання комп'ютерної архітектури. Маючи таку книгу і, можливо, емулятор commodore 64, що працює на вашому ПК, щоб ви могли спробувати речі, ви дізнаєтесь про те, як насправді будуються комп'ютерні системи в класичному втіленні комп’ютерної архітектури 1980-х років. На мою думку, один конкретний приклад - це краще місце для початку, ніж десяток теоретичних моделей, у яких відсутні відсутні деталі реального світу, які змушують роботу працювати. Якщо ви знаєте, що таке регістр, що таке АЛУ, що таке шина і що таке годинник, і які сигнальні системи використовуються в старому дизайні 1980-х років, це дасть вам основи, які вам потрібно знати, щоб зрозуміти щось недавнє, як, наприклад, "архітектура піщаних мостів" від Intel. Історично огляньтесь на оригінали, наприклад, пошукайте архітектуру "Von neumann" на Вікіпедії.

  2. Просування вперед від моєї першої точки на кілька років; Дізнайтеся про оригінальну архітектуру IBM PC, мову складання 8086 та шину ISA. Виходячи з цього та його обмежень, розуміння того, що містить процесор "Intel COre i7" та що роблять шини PCI та PCI-e і для чого вони потрібні, може виходити природніше. Архітектура ПК на сьогоднішній день все ще має трохи «похмілля» від оригінального дизайну IBM PC. Спосіб завантаження (завантаження) початкового програмного забезпечення (операційної системи) на ПК 2011 року все ще належить спадщині оригінального комп'ютера IBM та його BIOS BI, а також його налаштуванням CMOS в оригінальному ПК.

  3. Використовуйте та змінюйте попередньо налаштовану збірку Linux, яка працює на якомусь вбудованому пристрої, який не є ПК, і ви дізнаєтесь багато про вбудовану комп'ютерну архітектуру, а не лише технічну архітектуру, але чому деякі функції є. Гарний приклад, який доступний дешево - це TS-7200, на якому є гарний ПК-104 (шина ISA, як і в оригінальному ПК). Комп'ютери PC-104 (вбудована 16-бітна ISA-шина, яка сумісна з комп'ютерами IBM PC / AT 80286 епохи) - це відмінний спосіб для недизайнерського дизайнера побудувати вбудовану систему, оскільки модулі можуть бути складимими. Хочете отримати додатковий IO або периферійні пристрої? Просто складіть кілька модулів. TS-7200 має ядро ​​без x86 (процесор ARM9), здатний запускати або big-endian, або little-endian. Якщо ви ще не зіткнулися з "витримкою" у своїй навчальній подорожі з архітектури, це гарне місце, щоб зіткнутися з цим.


0

Більшість книг на мові збірки обговорюватимуть відповідні особливості архітектури, але зазвичай це стосується лише архітектури, на яку націлена книга. Таким чином, ви отримаєте інформацію про розсипання кешу та методи картографування сторінок MMU, але, ймовірно, нічого не стосується.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.