You are on page 1of 6

Bách khoa toàn thư mở Wikipedia

Bước tới: menu, tìm kiếm

Trong kỹ thuật máy tính, kiến trúc máy tính là thiết kế khái niệm và cấu trúc hoạt động căn
bản của một hệ thống máy tính. Nó là một bản thiết kế (blueprint) mô tả có tính chất chức
năng về các yêu cầu (đặc biệt là tốc độ và các kết nối tương hỗ) và những sự thi hành thiết kế
cho những bộ phận khác nhau của một máy tính - tập trung chủ yếu vào việc CPU hoạt động
nội tại như thế nào và truy cập các địa chỉ trong bộ nhớ bằng cách nào.

Nó cũng có thể được định nghĩa như là khoa học và nghệ thuật lựa chọn và kết nối các thành
phần phần cứng để tạo thành các máy tính đáp ứng được các mục đích về tính năng, hiệu suất
và giá cả.

Kiến trúc máy tính bao gồm ít nhất ba phạm trù con chính[1]:

• Kiến trúc tập lệnh (Instruction set architecture, ISA), là hình ảnh trừu tượng của một
hệ thống tính toán được nhìn từ góc độ của một lập trình viên sử dụng ngôn ngữ máy
(hay hợp ngữ), bao gồm tập lệnh, cách đánh địa chỉ bộ nhớ (memory address modes),
các thanh ghi, và các định dạng địa chỉ và dữ liệu.

• Vi kiến trúc (Microarchitecture), còn gọi là Tổ chức máy tính (Computer


organization) là một mô tả bậc thấp, cụ thể hơn về hệ thống. Mô tả này nói về các bộ
phận cấu thành của hệ thống được kết nối với nhau như thế nào và chúng hoạt động
tương hỗ như thể nào để thực hiện kiến trúc tập lệnh[2]. Ví dụ, kích thước bộ đệm
cache của một máy tính là một đặc điểm về tổ chức máy tính mà thường không liên
quan đến kiến trúc tập lệnh.

• Thiết kế hệ thống (System Design) bao gồm tất cả các thành phần phần cứng khác bên
trong một hệ thống tính toán chẳng hạn:

1. các đường kết nối hệ thống như bus (máy tính) và switch
2. các bộ điều khiển bộ nhớ (memory controller) và các cây phả hệ bộ nhớ
3. các cơ chế CPU off-load như Direct memory access (truy nhập bộ nhớ trực tiếp)
4. các vấn đề như đa xử lý (multi-processing).

Phần cứng máy tính

Bách khoa toàn thư mở Wikipedia


(đổi hướng từ Phần cứng máy tính)
Bước tới: menu, tìm kiếm
Các thành phần chính của máy tính cá nhân để bàn. 1: màn hình, 2: bo mạch chủ, 3: CPU, 4:
chân cắm ATA, 5: RAM, 6: các thẻ cắm mở rộng chức năng cho máy, 7: nguồn điện, 8: ổ đĩa
quang, 9: ổ đĩa cứng, 10: bàn phím, 11: chuột

Phần cứng, còn gọi là cương liệu (tiếng Anh: hardware), là các cơ phận (vật lý) cụ thể của
máy tính hay hệ thống máy tính như là màn hình, chuột, bàn phím, máy in, máy quét, vỏ máy
tính, bộ nguồn, bộ vi xử lý CPU, bo mạch chủ, các loại dây nối, loa, ổ đĩa mềm, ổ đĩa cứng, ổ
CDROM, ổ DVD, ...

Dựa trên chức năng và cách thức hoạt động người ta còn phân biệt phần cứng ra thành:

• Nhập hay đầu vào (Input): Các bộ phận thu nhập dữ liệu hay mệnh lệnh như là bàn
phím, chuột...
• Xuất hay đầu ra (Output): Các bộ phận trả lời, phát tín hiệu, hay thực thi lệnh ra bên
ngoài như là màn hình, máy in, loa, ...

Ngoài các bộ phận nêu trên liên quan tới phần cứng của máy tính còn có các khái niệm quan
trọng sau đây:

• Bus: chuyển dữ liệu giữa các thiết bị phần cứng.


• BIOS (Basic Input Output System): còn gọi là hệ thống xuất nhập cơ bản nhằm khởi
động, kiểm tra, và cài đặt các mệnh lệnh cơ bản cho phần cứng và giao quyền điều
khiển cho hệ điều hành
• CPU: bộ phân vi xử lý điều khiển toàn bộ máy tính
• Kho lưu trữ dữ liệu: lưu giữ, cung cấp, thu nhận dữ liệu
• Các loại chíp hỗ trợ: nằm bên trong bo mạch chủ hay nằm trong các thiết bị ngoại vi
của máy tính các con chip quan trọng sẽ giữ vai trò điều khiển thiết bị và liên lạc với
hệ điều hành qua bộ điều vận hay qua phần sụn (nghe hơi khó chịu, không được dễ
hiểu,tiếng Anh firmware)
• Bộ nhớ: là thiết bị bên trong bo mạch chủ giữ nhiệm vụ trung gian cung cấp các mệnh
lệnh cho CPU và các dữ liệu từ các bộ phận như là BIOS, phần mềm, kho lưu trữ,
chuột đồng thời tải về cho các bộ phận vừa kể kết quả các tính toán, các phép toán
hay các dữ liệu đã/đang được xử lý
• các cổng vào/ra
Kiến trúc phần mềm
• Kiến trúc phần mềm của một chương trình máy tính hay một hệ
thống tính toán là cấu trúc của các thành phần trong hệ thống đó.
Kiến trúc phần mềm bao gồm các phần tử phần mềm, các thuộc
tính và mối quan hệ giữa chúng. Ngoài ra, thuật ngữ "kiến trúc
phần mềm" cũng đề cập đến các tài liệu kiến trúc phần mềm của
một hệ thống, thuận tiện cho việc trao đổi thông tin giữa các thành
viên trong một dự án. Kiến trúc phần mềm giúp việc quyết định ở
mức cao trong thiết kế phần mềm dễ dàng hơn và cho phép tái sử
dụng các thành phần và mẫu thiết kế của các dự án.

Tổng quan
Lĩnh vực khoa học máy tính trải qua sự kết hợp các vấn đề cùng với sự phức tạp của cấu
trúc[2]. Lúc đầu, sự phức tạp được giải quyết bởi người phát triển bằng cách lựa chọn các cấu
trúc dữ liệu đúng đắn, phát triển các thuật toán và áp dụng các thuật toán để chia nhỏ các vấn
đề. Thuật ngữ kiến trúc phần mềm liên quan đến sự mới mẻ của ngành công nghiệp này,
nhưng nguyên tắc cơ bản của nó đã được áp dụng bởi các chuyên gia tiên phong trong ngành
công nghệ phần mềm từ những năm 1980. Các cố gắng ban đầu để nắm bắt và giải thích kiến
trúc phần mềm của một hệ thống thường không chính xác và chưa được tổ chức rõ ràng. Nó
được mô tả bởi các lược đồ “box and line” gồm một tập hợp các hộp và các đường kẻ[3].
Trong những năm 1990, đã có một số nỗ lực tập trung để xác định và hệ thống hoá các khía
cạnh cơ bản của môn học. Nhiều khái niệm của mẫu thiết kế (Design Pattern), kiểu dáng
(styles), các ngôn ngữ đặc tả và luận lý hình thức (formal logic) đã được phát triển trong thời
gian này.

Khái niệm “Kiến trúc phần mềm” tập trung vào việc giảm tải các phức tạp bằng cách trừu
tượng hóa vấn đề và phân chia rõ trách nhiệm công việc. Tuy vậy, đến ngày nay vẫn chưa có
một khái niệm thật chính xác và rõ ràng cho thuật ngữ “Kiến trúc phần mềm”[4].

Như vậy mặc dù khái niệm “Kiến trúc phần mềm” đã xuất hiện trong các giảng đường đại
học và được đưa vào sử dụng trong ngành công nghệ phần mềm, nhưng việc nó vẫn chưa có
các quy tắc, luật lệ chung và chưa rõ ràng nên thiết kế kiến trúc phần mềm vẫn là một sự pha
tạp giữa “khoa học” và “nghệ thuật”. Vẻ “nghệ thuật” của kiến trúc phần mềm được lý giải là
do có sự xuất hiện của các yêu cầu phi chức năng của hệ thống mà phần mềm phải đáp ứng
được các yêu cầu này, chẳng hạn như các yêu cầu về các thuộc tính chất lượng [5]. Ngoài ra,
phần mềm còn phải thỏa mãn các yêu cầu khác như: khả năng chịu lỗi, tính tương thích với
các phiên bản cũ của các phần mềm khác (backward compatibility [6]), khả năng mở rộng,
tính tin cậy, khả năng bảo trì, tính hiện hữu, tính bảo mật, tính dễ dùng, và một số các yêu cầu
khác nữa [5].

Để chuyển các quan điểm, yêu cầu của người sử dụng sang kiến trúc phần mềm, cần phải tiến
hành một số bước tìm hiểu, tham khảo các yêu cầu riêng và các sở thích riêng của từng loại
người dùng phần mềm. Ngoài ra còn phải tìm hiểu, tham khảo các ý kiến của đội phát triển
phần mềm, đội bảo trì phần mềm, đội kiểm thử, đội triển khai phần mềm. Vì lẽ đó, kiến trúc
phần mềm phải là nơi thỏa mãn được các quan điểm, các yêu cầu của những nguồn khác
nhau. Và điều đó cũng đặt ra yêu cầu cho việc phải đảm bảo ngay từ giai đoạn xây dựng kiến
trúc phần mềm, đã phải thỏa mãn các quan điểm, yêu cầu của những nguồn khác nhau; trước
khi giai đoạn phát triển phần mềm được thực hiện.

[sửa] Lịch sử
Nguồn gốc của kiến trúc phần mềm như một ý tưởng được giới thiệu đầu tiên trong nghiên
cứu của Edsger Dijkstra năm 1968 và David Parnas đầu những năm 1970. Các nhà khoa học
nhấn mạnh rằng cấu trúc của một hệ thống phần mềm rất quan trọng và đạt được cấu trúc
đúng đắn là một yếu tố quyết định. Các nghiên cứu về lĩnh vực này ngày càng nhiều và trở
nên phổ biến từ đầu những năm 1990 cùng với các nghiên cứu tập trung vào các mẫu thiết kế
(pattern), ngôn ngữ đặc tả kiến trúc (Architecture Description Languages), tài liệu kiến trúc
và các phương pháp chính thức. Các viện nghiên cứu đóng vai trò quan trọng trong nghiên
cứu môn học kiến trúc phần mềm. Mary Shaw và David Garlan của viện nghiên cứu Carnegie
Mellon đã viết cuốn sách “Software Architecture: Perspectives on an Emerging Discipline”
vào năm 1996, mang đến các khái niệm tiến bộ trong kiến trúc phần mềm như thành phần
(component), kết nối (connector), kiểu (style) và nhiều thứ nữa. Trường đại học tổng hợp
California, viện nghiên cứu phần mềm Irvine cũng có nhiều nỗ lực trong nghiên cứu kiến trúc
phần mềm, chủ yếu hướng vào các kiểu kiến trúc, ngôn ngữ đặc tả kiến trúc và các kiến trúc
động. Một trong những chuẩn đầu tiên trong kiến trúc phần mềm là chuẩn ANSI/IEEE 1471-
2000 được ISO chấp nhận như ISO/IEC DIS 25961.

[sửa] Lý giải sự quan trọng của kiến trúc phần mềm


Có ba lý do chính [1] để giải thích tầm quan trọng của kiến trúc phần mềm:

[sửa] Hỗ trợ việc giao tiếp

Hỗ trợ việc giao tiếp với các thành viên trong dự án. Kiến trúc phần mềm tái hiện một vẻ bề
ngoài trừu tượng của hệ thống. Với sự trừu tượng hóa hệ thống với các khái niệm dễ hiểu,
những thành viên trong dự án sẽ chỉ cần vận dụng các kiến thức cơ bản của mình về hệ thống
trong việc tìm hiểu, dàn xếp, phối hợp làm việc, và bàn bạc trao đổi với nhau.

[sửa] Giúp ra quyết định sớm hơn

Việc ra quyết định được thực hiện sớm hơn. Kiến trúc phần mềm biểu thị các quyết định thiết
kế dành cho hệ thống. Như vậy các đội tham gia phát triển, triển khai, kiểm thử và bảo trì
phần mềm cũng như các nhóm người dùng và các cấp quản lý sẽ có cái nhìn tổng quan hơn
cũng như sớm hơn về hệ thống ngay từ khi nó còn sơ khai. Mỗi đội đó sẽ có các đóng góp ý
kiến của mình, các đề xuất cũng như các phản bác của mình khi mọi chuyện chưa quá muộn.
Nếu không có quyết định sớm, thì khi phần mềm đã được xây dựng hoàn chỉnh hoặc khá
hoàn chỉnh mà đột ngột xuất hiện các yêu cầu thay đổi từ phía nhóm này hoặc nhóm khác,
ngoài việc gây trì trệ cho tiến độ công việc mà còn có thể gây ra tâm lý căng thẳng, mâu
thuẫn giữa các đội tham gia trong dự án.
[sửa] Tính khả chuyển cho hệ thống

Kiến trúc phần mềm không phụ thuộc vào một ngôn ngữ cụ thể nào cả mà chỉ tuân theo một
số chuẩn của các ngôn ngữ đặc tả nó. Ngoài ra, kiến trúc phần mềm khi được xây dựng cho
một hệ thống, nó tạo thành một mô hình có sự gắn kết tương đối với hệ thống. Kiến trúc phần
mềm còn chỉ ra cách thức mà phần mềm làm việc với hệ thống. Do vậy, khi ta muốn chuyển
phần mềm sang làm việc ở các hệ thống khác có những điểm tương đồng nhất định với hệ
thống cũ thì phần mềm này cũng sẽ có các thuộc tính chất lượng và các yêu cầu chức năng
được đảm bảo là không quá khác so với khi tồn tại ở hệ thống cũ.

Mô tả kiến trúc phần mềm


Ngôn ngữ đặc tả kiến trúc

Ngôn ngữ đặc tả kiến trúc ADL (Architecture Description Languages) được sử dụng để mô tả
một kiến trúc phần mềm. Có nhiều ngôn ngữ ADL khác nhau được phát triển bởi các tổ chức
như Wrigh (được phát triển bởi Carnegie Mellon), ACME (Carnegie Mellon), xADL (UCI),
Darwin (Imperial College London), DAOP-ADL (Trường đại học Málaga - Tây Ban Nha).
Các thành phần cơ bản của một ngôn ngữ ADL là thành phần, kết nối và cấu hình hệ thống.

Dòng thời gian


• Thập niên 1940: Các chương trình cho máy tính được viết bằng tay.
• Thâp niên 1950: Các công cụ đầu tiên xuất hiện như là phần mềm biên dịch Macro
Assembler và phần mềm thông dịch đã được tạo ra và sử dụng rộng rãi để nâng cao
năng suất và chất lượng. Các trình dịch được tối ưu hoá lần đầu tiên ra đời.
• Thập niên 1960: Các công cụ của thế hệ thứ hai như các trình dịch tối ưu hoá và
công việc kiểm tra mẫu đã được dùng để nâng cao sản phẩm và chất lượng. Khái
niệm công nghệ phần mềm đã được bàn thảo rộng rãi.
• Thập niên 1970: Các công cụ phần mềm, chẳng hạn trong UNIX các vùng chứa mã,
lệnh make, v.v. được kết hợp với nhau. Số lượng doanh nghiệp nhỏ về phần mềm
và số lượng máy tính cỡ nhỏ tăng nhanh.
• Thập niên 1980: các PC và máy trạm ra đời. Cùng lúc có sự xuất hiện của mô hình
dự toán khả năng. Lượng phần mềm tiêu thụ tăng mạnh.
• Thập niên 1990: Phương pháp lập trình hướng đối tượng ra đời. Các quá trình
nhanh như là lập trình cực hạn được chấp nhận rộng rãi. Trong thập niên này,
WWW và các thiết bị máy tính cầm tay phổ biến rộng rãi.
• Hiện nay: Các phần mềm biên dịch và quản lý như là .NET, PHP và Java làm cho
việc viết phần mềm trở nên dễ dàng hơn nhiều.

[sửa] Hướng tương lai của kỹ nghệ phần mềm


Lập trình định dạng và các phương pháp linh hoạt sẽ giữ vai trò quan trọng trong tương lai
của công nghệ phần mềm. ICSE 2005 đã tham gia theo dõi cả hai chủ đề này. (ICSE là dạng
viết tắt của International Conference on Software Engineering tức là Hội nghị Quốc tế về Kỹ
nghệ Phần mềm.)
- Lập trình định dạng (aspect-oriented programming) sẽ giúp người lập trình ứng xử với các
yêu cầu không liên quan đến các chức năng thực tế của phần mềm bằng cách cung ứng các
công cụ để thêm hay bớt các khối mã ít bị thay đổi trong nhiều vùng của của mã nguồn. Lập
trình định dạng mô tả các đối tượng và hàm nên ứng xử như thế nào trong một tình huống cụ
thể.

Thí dụ: Lập trình định dạng có thêm vào các cơ cấu kiểm soát hiệu chỉnh lỗi, biên
bản và khoá cho tất cả các đối tượng của một số kiểu. Các nhà nghiên cứu đang tìm
cách ứng dụng lập trình định dạng để thiết kế mã cho mục tiêu thông thường.

- Phát triển phần mềm linh hoạt: nhằm hướng dẩn các đề án phát triển phần mềm mà trong đó
bao gồm việc thoả mãn các nhu cầu thay đổi và sự cạnh tranh của thị trường một cách nhanh
chóng. Các quá trình cồng kềnh, nặng về hồ sơ tính như là TickIT, CMM và ISO 9000 đang
lu mờ dần tầm quan trọng.

Hội nghị Future of Software Engineering (FOSE) tin rằng ICSE 2000 đã hồ sơ hoá các tính
năng hiện đại nhất của kỹ nghệ phần mềm và nêu ra nhiều vấn đề cần được giải quyết trong
thập niên tới.

Đề án Feyerabend có ý định tìm hiểu tương lai của kỹ nghệ phần mềm qua tìm kiếm và xuất
bản các ý kiến sáng tạo.

You might also like