Nạp chương trình

Một phần của tài liệu Bài giảng: Cấu trúc máy tính và ghép nối pot (Trang 84 - 87)

c, Liên kết thông qua stack

5.3.2. Nạp chương trình

Chương trình nạp loader là chương trình được sử dụng để nạp chương trình lên bộ nhớ. Nhiệm vụ của loader là nạp các phân vùng bộ nhớ khác nhau với các

đặc thù như các giá trị thanh ghi điều khiển ví dụ như %sp, bộ đếm chương trình, %pc chuyển nó thành giá trị tương ứng để chương trình có thể hoạt động bình thường

Nếu tại một thời điểm chỉ có 1 chương trình được nạp, việc thực thi chương trình hoạt động rất đơn giản. Tuy nhiên, trong các hệ điều hành hiện đại, một vài chương trình có thể được nạp cùng lúc, do đó không có cách nào để linker hay loader có thể biết được địa chỉ mà nó đang xử lý. Chương trình nạp cần xác

định lại địa chỉ của các modul bằng cách nạp vào địa chỉ offset đối với toàn bộ

các lệnh trong modul. Phương pháp này có tên là relocating loader. Phương pháp nạp relocating không lặp lại công việc của chương trình liên kết linker. Chương trình liên kết linker sẽ kết hợp một vài modul thành một modul duy nhất, trong khi đó, bộ nạp loader đánh lại địa chỉ của một chương trình duy nhất

để nhiều chương trình có thể đồng thời nạp vào bộ nhớ chương trình. Phương pháp nạp thứ 2 có tên linking loader. Phương pháp này có chức năng của cả

chương trình kết nối linker và chương trình nạp loader: xác định lại địa chỉ các biến, đánh lại địa chỉ các modul và nạp vào bộ nhớ

Chương trình liên kết sẽ tạo ra file chứa các thông tin đặc tả lại quá trình liên kết như địa chỉ bắt đầu của chương trình, các thông tin đánh lại địa chỉ và các

điểm bắt đầu của các chương trình con

Một cách khác để nạp bộ nhớ chương trình là sử dụng chương trình quản lý bộ

nhớ memory managemet unit MMU. Chương trình này sẽ phân chia bộ nhớ

vật lý thành từng phân vùng (segment). Việc truy cập một ô nhớ sẽ là truy cập vào phân vùng tương ứng và địa chỉ offset. Các chương trình khác nhau có thể

Thư vin liên kết động DLL

Quay trở lại về thư viện liên kết động DLL, khái niệm này có một số tính năng hấp dẫn. Các biến của các chương trình con thường xuyên được sử dụng ví dụ

như chương trình quản lý bộ nhớ hay quản lý đồ họa sẽ được lưu vào một vị trí,

đó là thư viện DDL. Điều này làm cho kích thước chương trình nhỏ hơn bởi vì mỗi chương trình không cần phải lưu lại một bản sao DDL mà thông thường phải có. Tất cả các chương trình chia sẻ các đoạn mã của mình ngay cả trong lúc thực hiện. Hơn nữa, thư viện DDL còn được nâng cấp khả năng phân tích lỗi hoặc các chức năng khác. Như thế, các chương trình sử dụng tới nó không cần phải chuyển mã hay liên kết lại

5.4. Macro

Trong quá trình sử dụng chương trình con, chúng ta nhận thấy là một số lượng các thanh ghi sẽ được lưu vào và lấy ra từ stack trong quá trình gọi chương trình con và quay về chương trình chính. Để cất thanh ghi %r15 vào stack, hệ thống phải thực hiện 2 quá trình được thể hiện bởi 2 dòng lệnh sau

Addcc %r14, -4- %r14 ! Giảm giá trị thanh ghi stack pointer St %r15, %r14 ! Cất nội dung %r15 vào stack

Trong trường hợp này, hành động xảy ra chỉ bao bồm 2 lệnh. Tuy nhiên nếu hành động xảy ra lặp đi lặp lại nhiều lần bao gồm nhiều lệnh thì việc viết đi viết lại đoạn chương trình lặp lại trở nên rất nhàm chám. Do đó, ta có thể thay thế đoạn chương trình đó bằng chương trình macro. Trong ví dụ trên, ta có thể thay thế 2 câu lệnh bằng một lời gọi macro

Push %r15

Trong đó push là một macro với nội dung sau được thể hiện trong hình 5.9

Một macro được định nghĩa bởi lệnh giả .macro và kết thúc bởi .endmacro. Ngay sau lệnh giả .macro là tên của macro do người sử dụng đặt ra và các toán tử là các biến địa phương được sử dụng trong thân chương trình macro.

TỔNG KẾT CHƯƠNG

Trong chương này, chúng ta đã tìm hiểu một số vấn đề quan trọng sau

• Quá trình biên dịch chương trình từ ngôn ngữ cấp cao như C hay Pascal sang hợp ngữ bao gồm các nhóm lệnh dịch chuyển dữ liệu, nhóm lệnh toán học và nhóm lệnh điều khiển luồng chương trình

• Quá trình chuyển hợp ngữ sang ngôn ngữ máy – quá trình chuyển mã 2 lần

• Kết nối các modul chương trình thành 1 chương trình lớn

Một phần của tài liệu Bài giảng: Cấu trúc máy tính và ghép nối pot (Trang 84 - 87)