Trước khi cần tạo ra các chương trình sẽ chạy thường xuyên, thí dụ các chương trình của hệ điều hành, nói chung người ta đều viết bằng ngôn ngữ assembly nhằm đạt tốc độ chạy cao và tiết kiệm bộ nhớ. Ngày nay người ta không làm như vậy nữa. Có thể kể ra một số nguyên nhân chính sau đây.
Thứ nhất, giá bộ nhớ giảm không ngừng, việc cố gắng viết chương trình sao cho càng nhỏ càng tốt để tiết kiệm bộ nhớ không còn mấy ý nghĩa nữa. Ngoài ra tốc độ bộ nhớ và CPU cũng ngày càng tăng, việc sử dụng ngôn ngữ assembly nhằm tạo ra các chương trình chạy nhanh hơn trong phần lớn các trường hợp cũng không đem lại ý nghĩa thực tế gì.
Nguyên nhân thứ hai là các chương trình ngày càng lớn và phức tạp, được nhiều người cùng tham gia viết trong thời gian dài, vấn đề dễ đọc, dễ bảo trì, dễ sửa đổi và sử dụng lại có ý nghĩa thực sự quan trọng.
Nguyên nhân thứ ba liên quan tới các chương trình dịch (compiler), việc viết các chương trình dịch đã trở thành một công nghệ phát triển, các chương trình dịch
ngày nay có thể nhận vào các chương trình nguồn viết bằng ngôn ngữ bậc cao và sinh ra các chương trình mã máy rất hiệu quả, chúng vừa nhỏ vừa chạy nhanh.
Chúng ta sẽ rút ra được các kết luận hữu ích khi so sánh hai hệ điều hành là MULTICS và TSS/67 cho máy IBM 360/67. Cả hai hệ điều hành này đều được bắt đầu viết vào cùng một khoảng thời gian và chúng có kích thước xấp xỉ nhau. Một phần lớn, khoảng 95% hệ điều hành MULTICS được viết bằng ngôn ngữ bậc cao PL/I, còn hệ điều hành TSS/67 của IBM được viết hoàn toàn bằng ngôn ngữ assembly.
Các hệ điều hành lớn như MULTICS và TSS/67 phải thực hiện nhiều nhiệm vụ khác nhau, chẳng hạn phải điều khiển tất cả các thiết bị I/O, giải quyết tất cả các tình huống được định thời chặt chẽ, phải quản lý các cơ sở dữ liệu lớn. v. v. Hiệu suất cao là một vấn đề có tính cốt yếu đối với hệ điều hành, chính vì vậy nó có thể được sử dụng để viết nên hệ điều hành.
Năng suất lập trình tính trung bình theo số dòng lệnh không phụ thuộc ngôn ngữ lập trình được sử dụng.
Kết quả thực hiện hai dự án hệ điều hành trên cho thấy, chúng được hoàn thành trong các khoảng thời gian ngang nhau. Tuy nhiên điều đặc biệt đáng chú ý là nhóm viết MULTICS chỉ có 50 người và chi phí ước tính 10 triệu đôla, trong khi nhóm viết TSS/67 gồm 300 người và chi phí ước tính là 50 triệu đôla (theo Grâhm,1970). Việc sử dụng ngôn ngữ lập trình bậc cao PL/I đã tiết kiệm cho dự án MULTICS hàng chục triệu đôla, chi phí cho việc viết chương trình chỉ bằng 20% so với dự án TSS/67.
Các nghiên cứu đã chỉ ra rằng, nếu một người lập trình làm việc cho một dự án trong khoảng thời gian vài năm, thì tính trung bình hàng tháng anh ta viết được từ 100 đến 200 dòng lệnh, không phụ thuộc vào ngôn ngữ lập trình được sử dụng (theo Corbató, 1969). Người lập trình chỉ có thể hy vọng đạt được năng suất lao động lập trình cao so với các chương trình nhỏ. Bởi vì một chỉ thị ngôn ngữ PL/I tương đương với từ 5 đến 10 lần năng suất của người lập trình assembly. Đối với các ngôn ngữ lập trình bậc cao khác, kết quả cũng tương tự như vậy.
Chương trình bằng ngôn ngữ bậc cao dễ đọc, dễ hiểu hơn.
Có một lý do quan trọng khác nữa khiến người ta tránh sử dụng ngôn ngữ assembly; Đó là ngay cả một người lập trình assembly chuyên nghiệp nói chung cũng khó mà hiểu được chương trình assembly do người khác viết, nhất là khi chương trình đó dài.
30.000 chương trình viết bằng assembly. Mặc dầu không có ai thử cố gắng đọc toàn bộ chương trình nguồn của MULTICS, nhưng cũng có những người cố gắng tìm hiểu các chương trình con cụ thể, chúng có chiều dài trung bình 4 trang bằng ngôn ngữ PL/I.
Trong các dự án lớn sự thay đổi nhân sự hàng năm tính trung bình là 15%, như vạy sau 5 năm trong nhóm lập trình chỉ còn lại rất ít người đã tham gia từ đầu dự án. Nếu như những người lập trình mới ra nhập nhóm không hiểu được chương trình của những người trước họ để lại thì các dự án sẽ gặp một trở ngại rất lớn.
CHƯƠNG 8 HỆ THỐNG VÀO RA 8.1 Tổng quan về hệ thống vào ra
Chức năng: Trao đổi thông tin giữa Máy tính với môi trường bên ngoài. Máy tính muốn trao đổi với con người cần có bàn phím, chuột, loa, mic, … Máy tính muốn trao đổi thông tin với không gian cần có máy ảnhthẻ nhớ, máy Scan, … Các thao tác cơ bản: • Vào dữ liệu • Ra dữ liệu Các thành phần chính: • Thiết bị ngoại vi
• Module ghép nối vào ra
Thiết bị ngoại vi
Chức năng: phương tiện chuyển đổi thông tin giữa bên trong và bên ngoài máy tính
Đặc điểm các thiết bị:
Trên thị trường tồn tại rất nhiều các thiết bị ngoại vi khác nhau về: Nguyên tắc hoạt động, tốc độ, định dạng dữ liệu truyền, v.v. Đồng thời các thiết bị này có tốc độ làm việc chậm hơn CPU và RAM rất nhiều. Chính vì lý do trên cần có Module vào ra để ghép nối các thiết bị ngoại vi vào hệ thống BUS máy tính.
Phân loại:
• Thiết bị nhập: Keyboard, Mouse, Scan, Micro,… • Thiết bị xuất: Monitor, Printer,
• Thiết bị xuất nhập: Modem, NIC, Driver,…
Hình 8-34 Sơ đồ cấu trúc tổng quan của thiết bị ngoại vi
• Bộ chuyển đổi tín hiệu: chuyển đổi dữ liệu giữa bên trong và bên ngoài Máy tính
• Bộ đệm dữ liệu: nơi lưu trữ dữ liệu trung gian giữa Máy tính và thiết bị ngoại vi, đặt bên trong thiết bị ngoại vi.
• Khối logic điều khiển: điều khiển hoạt động của thiết bị ngoại vi theo tín hiệu từ Module I/O gởi tới thiết bị.
Module I/O
Chức năng: Nối ghép thiết bị ngoại vi với bus của máy tính. • Điều khiển và định thời
• Trao đổi thông tin với CPU
• Trao đổi thông tin với thiết bị ngoại vi • Đệm giữa máy tính với thiết bị ngoại vi • Phát hiện lỗi của các thiết bị ngoại vi. Cấu trúc chung:
Hình 8-35 Sơ đồ cấu trúc chung của module vào ra
• Thanh ghi đệm dữ liệu: đệm dữ liệu trong quá trình trao đổi
• Cổng nối ghép vào ra: kết nối thiết bị ngoại vi, mỗi cổng có địa chỉ xác định và chuẩn kết nối riêng phụ thuộc sơ đồ chân.
• Thanh ghi trạng thái/điều khiển: lưu trữ thông tin trạng thái cho các cổng vào ra
• Khối logic điều khiển: điều khiển Module vào ra