Ủng hộ tôi
Máy tính được chia thành 2 thành phần chính:
Phần cứng máy tính: Các thực thể vật lý mà con người có thể cảm nhận được.
Phần mềm máy tính: Khái niệm trừu tượng mà con người không thể cảm nhận được. Chúng ta giao tiếp với phần mềm không qua việc chúng ta giao tiếp với phần cứng máy tính (ví dụ chúng ta di chuột, gõ bàn phím, thu âm, …), sau đó phần mềm sẽ dựa trên sự thay đổi giá trị được thể hiện trong phần cứng máy tính để phản hồi lại, việc phản hồi lại cho con người cũng phải thông qua phần cứng máy tính (ví dụ hiện thị trên màn hình, phát ra loa, …).
Sơ đồ phân lớp máy tính được trình bày trong hình bên dưới:
Trong hình trên, các lớp thuộc phần mềm máy tính bao gồm:
Ứng dụng: Thực hiện các nhu cầu của con người, chẳng hạn: xem phim, gõ văn bản, lướt web, chơi game, …
Hệ điều hành: Cung cấp môi trường thực thi Ứng dụng và quản lý phần cứng nhằm thực hiện các tác vụ được yêu cầu bởi Ứng dụng.
Các lớp thuộc về phần cứng máy tính bao gồm:
Mạch Số: Xử lý các dữ liệu của phần mềm dưới dạng các tín hiệu số.
Vật lý: Xử lý thực sự các tín hiệu được yêu cầu bởi lớp Mạch Số.
Để giao tiếp được giữa phần cứng và phần mềm máy tính, chúng ta cần một lớp giao tiếp có chức năng trừu tượng hóa các thao tác của phần cứng dưới dạng các chỉ dẫn mà chúng ta gọi là lệnh. Tập hợp các lệnh và cách thức biểu diễn lệnh được gọi là Kiến trúc tập lệnh.
Với suy nghĩ của hầu hết các lập trình viên, công việc chủ yếu là lập trình để tạo Ứng dụng có thể chạy trên một Hệ điều hành nào đó (chẳng hạn như MS Windows, Mac OS, Android, iOS, các bản phân phối Linux, …) nên hầu như chỉ cần quan tâm đến việc lập trình, các chi tiết phức tạp của phần cứng sẽ được Hệ điều hành xử lý. Nhưng với suy nghĩ này thì các lập trình viên không hề biết liệu Ứng dụng của họ lập trình ra có tốc độ như thế nào, tiêu thụ điện năng bao nhiêu, có nguy cơ bị bẻ khóa phần mềm, … hay không.
Một trong những thước đo về tài năng của một lập trình viên đó là Ứng dụng của họ phải tận dụng được tối đa phần cứng, kích thước chương trình nhỏ, tốc độ thực thi nhanh, ít bị lỗ hổng mà các hacker có thể tận dụng để hack Ứng dụng, … Để đạt được những thước đo này, lập trình viên phải thực sự hiểu bản chất Ứng dụng của họ thực thi như thế nào, từ việc sử dụng các dịch vụ của Hệ điều hành cung cấp, cách Hệ điều hành thông qua Kiến trúc Tập lệnh để điều khiển Mạch Số thực hiện các dịch vụ này. Theo phân tích này, thì một lập trình viên chuyên nghiệp phải có kiến thức về:
Ứng dụng: Có khả năng lập trình để tạo ra các Ứng dụng.
Hệ điều hành: Hiểu được các dịch vụ của Hệ điều hành cung cấp.
Kiến trúc Tập lệnh: Hiểu được cách thức giao tiếp giữa phần mềm và phần cứng máy tính.
Mạch Số: Hiểu được Mạch số xử lý các yêu cầu từ phần mềm như thế nào.
Vật lý: Qúa chuyên sâu, không thực sự quan trọng với một kỹ sư không chuyên phần cứng nên có thể bỏ qua.
Dựa theo các yêu cầu này, học viên cần có kiến thức về 4 lớp bao gồm:
Ứng dụng: Các khóa học về Ngôn ngữ Lập trình, Cấu trúc Dữ liệu và Giải thuật, Cơ sở Dữ liệu, Quy trình Phát triển Phần mềm, …
Hệ điều hành: Môn học chuyên biệt về Hệ điều hành.
Kiến trúc Tập lệnh và Mạch số: Môn học kết hợp cả 2 lớp này là Tổ chức và Kiến trúc Máy tính, trong đó phần Tổ chức sẽ tập trung vào Mạch số và Kiến trúc Máy tính tập trung vào Kiến trúc Tập lệnh.
Như đã đề cập, môn học Tổ chức và Kiến trúc Máy tính bao gồm 2 mảng kiến thức là Kiến trúc Tập lệnh (giao tiếp giữa phần cứng và phần mềm) và Mạch số. Vì thế, để tham gia môn học này, học viên phải có kiến thức về ít nhất một ngôn ngữ lập trình để có thể hiểu được sự giao tiếp giữa phần cứng và phần mềm máy tính. Môn học được tổ chức thành 7 chương như sau:
Chương 3: Đại số Boolean và các phép toán cơ bản trong Máy tính
Chương 5: Tổ chức Máy tính
Chương 6: Hệ thống phân cấp bộ nhớ
Chương 7: Giao tiếp với các thiết bị ngoại vi