Cấu trúc logic của bộ nhớ chính. Mỗi ô nhớ có một ô nhớ riêng, tức là các ô nhớ và địa chỉ của chúng

Kiến trúc máy tính

Các thành phần cơ bản của một máy tính.

Máy tính bao gồm 4 thành phần cấu trúc:

1) Bộ xử lý.

Giám sát hoạt động của máy tính và cũng thực hiện các chức năng xử lý dữ liệu. Nếu một hệ thống chỉ có một bộ xử lý, nó thường được gọi là bộ xử lý trung tâm(CPU (bộ phận xử lý trung tâm)

2) Bộ nhớ chính.

Đây là nơi lưu trữ dữ liệu và chương trình. Ký ức này chỉ là tạm thời. Nó thường được gọi là thực hoặc RAM.

3) Thiết bị vào/ra.

Chúng dùng để truyền dữ liệu giữa máy tính và môi trường bên ngoài, bao gồm nhiều loại dữ liệu khác nhau. thiết bị ngoại vi, bao gồm bộ nhớ thứ cấp, thiết bị thông tin liên lạc và thiết bị đầu cuối.

4) Xe buýt hệ thống. Một số cấu trúc và cơ chế cung cấp sự tương tác giữa bộ xử lý, bộ nhớ chính và các thiết bị đầu vào/đầu ra.

Bộ nhớ chính

PC – bộ đếm chương trình

IR – thanh ghi lệnh

MAR – thanh ghi địa chỉ bộ nhớ

MBR - thanh ghi đệm bộ nhớ

I/O AR – thanh ghi địa chỉ đầu vào/đầu ra

I/O BR – Thanh ghi bộ đệm I/O

Hình 1. Các thành phần máy tính: cấu trúc chung.

Một trong những chức năng của bộ xử lý là giao tiếp với bộ nhớ. Để thực hiện việc này, nó thường sử dụng hai thanh ghi bên trong (liên quan đến bộ xử lý): thanh ghi địa chỉ bộ nhớ (MAR), lưu địa chỉ của ô nhớ nơi hoạt động đọc-ghi sẽ được thực hiện và thanh ghi bộ nhớ đệm - MBR), trong đó dữ liệu dự định được ghi vào bộ nhớ hoặc dữ liệu được đọc từ bộ nhớ sẽ được lưu trữ. Tương tự, số thiết bị I/O được chỉ định trong thanh ghi địa chỉ I/O (I/O AR). Thanh ghi bộ đệm I/O (I/O BR) được sử dụng để trao đổi dữ liệu giữa thiết bị I/O và bộ xử lý.

Một mô-đun bộ nhớ bao gồm nhiều ô được đánh số. Mỗi ô có thể chứa một số nhị phân được hiểu là lệnh hoặc dữ liệu. Mô-đun I/O được sử dụng để truyền dữ liệu từ các thiết bị bên ngoài tới bộ xử lý và bộ nhớ cũng như tới hướng ngược lại. Nó có bộ đệm nội bộ riêng để lưu trữ dữ liệu tạm thời.

Thanh ghi bộ xử lý

Bộ xử lý có một tập hợp các thanh ghi đại diện cho một vùng bộ nhớ truy cập nhanh, nhưng dung lượng nhỏ hơn nhiều so với bộ nhớ chính.

Các thanh ghi bộ xử lý (thực hiện hai chức năng) được chia thành 2 nhóm:

Người dùng có thể truy cập các thanh ghi. Các thanh ghi này cho phép người lập trình giảm số lượng truy cập vào bộ nhớ chính bằng cách tối ưu hóa việc sử dụng thanh ghi bằng cách sử dụng ngôn ngữ máy hoặc người lắp ráp.

Thanh ghi điều khiển và thanh ghi trạng thái. Được sử dụng trong bộ xử lý để điều khiển các hoạt động đang được thực hiện; với sự trợ giúp của chúng, các chương trình hệ điều hành đặc quyền có thể kiểm soát việc thực thi các chương trình khác.

Các đăng ký có sẵn cho người dùng:

Các thanh ghi dữ liệu. Có thể được sử dụng bởi bất kỳ lệnh máy nào cho các hoạt động dữ liệu. Thông thường điều này được chồng lên hạn chế nhất định. Ví dụ: một số thanh ghi được thiết kế cho các phép toán dấu phẩy động, trong khi một số khác dùng để lưu trữ số nguyên.

Các thanh ghi địa chỉ. Chúng chứa địa chỉ của lệnh và dữ liệu trong bộ nhớ chính; Các thanh ghi này chỉ có thể lưu trữ một phần địa chỉ được sử dụng để tính toán địa chỉ đầy đủ hoặc hiệu quả.

Thanh ghi điều khiển và trạng thái.

Các thanh ghi khác nhau được sử dụng để kiểm soát hoạt động của bộ xử lý. Trên hầu hết các máy, người dùng hầu như không thể truy cập được các thanh ghi này.

Ngoài các thanh ghi MAR, MBR, I/O AR, I/O BR đã đề cập, các thanh ghi sau đây rất quan trọng để thực thi lệnh:

Bộ đếm chương trình (bộ đếm chương trình – PC). Chứa địa chỉ của lệnh được lấy từ bộ nhớ.

Thanh ghi lệnh (IR). Chứa lệnh cuối cùng được chọn từ bộ nhớ.

Tất cả các bộ xử lý cũng bao gồm một thanh ghi được gọi là thanh ghi trạng thái chương trình (PSW). Nó thường chứa các mã điều kiện và thông tin trạng thái khác, chẳng hạn như bit kích hoạt/vô hiệu hóa ngắt hoặc bit chế độ hệ thống/người dùng.

Mã điều kiện (được gọi là cờ) là một chuỗi bit được bộ xử lý đặt hoặc xóa tùy thuộc vào kết quả của các thao tác được thực hiện. Ví dụ: một phép toán số học có thể dẫn đến số dương, số âm, số 0 hoặc tràn.

Ô nhớ Bộ nhớ máy tính bao gồm các "hạt" bit riêng lẻ, được kết hợp thành các nhóm (thanh ghi) 8 bit (byte). 1 byte là đơn vị cơ bản của bộ nhớ. Mỗi byte có số (địa chỉ) và nội dung riêng mã nhị phân. Khi bộ xử lý xử lý thông tin, nó sẽ tìm ô mong muốn tại một địa chỉ bộ nhớ, đọc nội dung, thực hiện các hành động cần thiết và ghi kết quả vào một ô nhớ khác. Nhóm ô nhớ của các byte liên tiếp bộ nhớ trong. Nội dung từ máy của một ô nhớ Độ rộng của ô nhớ và kích thước của từ máy tính bằng bit bằng với chiều rộng của bộ xử lý






Bộ nhớ tốc độ cao, được thực hiện dưới dạng mạch điện tử. RAM có sẵn để đọc và ghi thông tin. Trong RAM, chương trình hiện đang chạy và dữ liệu cần thiết cho chương trình đó được lưu trữ trong RAM, dữ liệu có thể được chỉnh sửa, xóa hoặc thêm vào. Đây là bộ nhớ lưu trữ tạm thời. RAM chỉ lưu trữ thông tin trong một phiên làm việc với máy tính - sau khi tắt máy tính khỏi mạng, dữ liệu được lưu trong RAM sẽ bị mất vĩnh viễn. RAM là một thiết bị dễ bay hơi. Dung tích mô hình hiện đại dao động từ 512 đến 1024 MB. RAM – bộ nhớ truy cập ngẫu nhiên (RAM – bộ nhớ truy cập ngẫu nhiên).


ROM - bộ nhớ vĩnh viễn (ROM - bộ nhớ chỉ đọc - bộ nhớ chỉ đọc). Trong nhiều máy tính, ROM được triển khai như một con chip riêng biệt, trong đó, trong quá trình sản xuất, lệnh cơ bản, thực hiện sự tương tác ban đầu của phần cứng và phần mềm. Loại bộ nhớ này chỉ đọc. Sau khi tắt máy tính, thông tin sẽ được lưu lại. ROM là một thiết bị không ổn định. ROM chứa một phần phòng mổ Hệ thống BIOS(Nền tảng Đầu ra đầu vào Hệ thống).


Bộ nhớ đệm – bộ nhớ trung gian giữa RAM và ROM “Cache” – nơi ẩn náu, kho lưu trữ (từ tiếng Anh). Dùng để tăng tốc độ máy tính. “Bí mật” của bộ đệm nằm ở chỗ nó vô hình đối với người dùng và dữ liệu được lưu trữ ở đó không thể truy cập được đối với phần mềm ứng dụng. Việc sử dụng loại bộ nhớ trong này làm giảm số lần truy cập vào ổ cứng. Việc thiếu bộ nhớ đệm có thể làm giảm đáng kể (20-30%) Tổng hiệu suất máy tính.


Bộ nhớ không bay hơi(Bộ nhớ CMOS, Chất bán dẫn oxit kim loại bổ sung) Các tùy chọn khác nhau cấu hình máy tính, chẳng hạn như số lượng và loại ổ đĩa, loại bộ điều hợp video, sự hiện diện của bộ đồng xử lý và một số dữ liệu khác, được lưu trữ trong cái gọi là bộ nhớ CMOS. Chip bộ nhớ CMOS cũng chứa thông thường Đồng hồ kỹ thuật số. Nhờ họ, bạn có thể tìm hiểu bất cứ lúc nào ngay hiện tại và thời gian. Để đảm bảo rằng khi tắt nguồn máy tính, nội dung của bộ nhớ CMOS không bị xóa và đồng hồ tiếp tục đếm ngược thời gian, chip bộ nhớ CMOS được cấp nguồn bằng một cục pin hoặc ắc quy nhỏ đặc biệt, cũng nằm trên bo mạch hệ thống



Trong tuần qua, tôi đã giải thích cho mọi người hai lần về cách tổ chức làm việc với bộ nhớ trong x86, để không phải giải thích lần thứ ba, tôi đã viết bài này.

Và vì vậy, để hiểu được cách tổ chức trí nhớ, bạn sẽ cần biết một số kiến ​​thức các khái niệm cơ bản, chẳng hạn như thanh ghi, ngăn xếp, v.v. Tôi sẽ cố gắng giải thích điều này một cách chi tiết trong suốt quá trình, nhưng rất ngắn gọn vì đây không phải là chủ đề của bài viết này. Vì vậy, hãy bắt đầu.

Như một lập trình viên biết, khi viết chương trình, anh ta không làm việc với địa chỉ vật lý mà chỉ bằng địa chỉ logic. Và chỉ khi anh ta lập trình bằng trình biên dịch mã. Trong cùng một ngôn ngữ C, các ô nhớ đã được con trỏ ẩn khỏi lập trình viên để thuận tiện cho người lập trình, nhưng nói một cách đại khái, con trỏ là một cách biểu diễn khác của địa chỉ bộ nhớ logic và trong Java không có con trỏ, một ngôn ngữ hoàn toàn xấu. Tuy nhiên, một lập trình viên có năng lực sẽ được hưởng lợi từ kiến ​​thức về cách tổ chức bộ nhớ, ít nhất là ở mức độ chung. Nói chung, những lập trình viên không biết cách thức hoạt động của máy thực sự làm tôi khó chịu, thường thì đây là Lập trình viên Java và những người PHP khác có trình độ dưới chuẩn.

Được rồi, buồn bã đủ rồi, hãy bắt tay vào công việc thôi.
Hãy xem xét không gian địa chỉ chế độ chương trình 32 bộ xử lý bit(đối với 64 bit mọi thứ đều giống nhau)
Không gian địa chỉ của chế độ này sẽ bao gồm 2^32 ô nhớ được đánh số từ 0 đến 2^32-1.
Lập trình viên làm việc với bộ nhớ này, nếu cần xác định một biến, anh ta chỉ cần nói một ô nhớ có địa chỉ như vậy sẽ chứa loại dữ liệu đó, trong khi bản thân lập trình viên có thể không biết ô này có số mấy, anh ấy sẽ chỉ viết một cái gì đó như:
dữ liệu int = 10;
Máy tính sẽ hiểu như sau: bạn cần lấy một ô nào đó có số trăm trăm và đặt số nguyên 10 vào đó. Hơn nữa, bạn sẽ không biết về địa chỉ của ô 18894, nó sẽ bị ẩn khỏi bạn.

Mọi thứ sẽ ổn, nhưng câu hỏi đặt ra là máy tính tìm kiếm ô nhớ này như thế nào, bởi vì bộ nhớ của chúng ta có thể khác:
Bộ đệm cấp 3
Bộ đệm cấp 2
1 cấp độ bộ đệm
Bộ nhớ chính
ổ cứng

Đây là tất cả những kỷ niệm khác nhau, nhưng máy tính dễ dàng tìm thấy cái nào chứa biến dữ liệu int của chúng ta.
Sự cố này được giải quyết bằng hệ điều hành cùng với bộ xử lý.
Toàn bộ bài viết tiếp theo sẽ được dành để phân tích phương pháp này.

Kiến trúc x86 hỗ trợ ngăn xếp.

Ngăn xếp là một vùng tiếp giáp bộ nhớ truy cập tạm thờiđược sắp xếp theo nguyên tắc chồng đĩa, bạn không thể lấy đĩa từ giữa chồng mà chỉ lấy đĩa ở trên cùng và cũng chỉ có thể đặt đĩa lên trên cùng của chồng đĩa.
Trong bộ xử lý, các mã máy đặc biệt được tổ chức để làm việc với ngăn xếp, cách ghi nhớ tập hợp trông như thế này:

toán hạng
đẩy toán hạng vào ngăn xếp

Nhạc pop toán hạng
lấy một giá trị từ đầu ngăn xếp và đặt nó vào toán hạng của nó

Một ngăn xếp trong bộ nhớ tăng dần từ trên xuống dưới, có nghĩa là khi bạn thêm một giá trị vào nó, địa chỉ của đỉnh ngăn xếp sẽ giảm và khi bạn thoát ra khỏi nó, địa chỉ của đỉnh ngăn xếp sẽ tăng lên.

Bây giờ chúng ta hãy xem ngắn gọn các thanh ghi là gì.
Đây là những ô nhớ trong chính bộ xử lý. Đây là loại bộ nhớ nhanh nhất và đắt nhất; khi bộ xử lý thực hiện một số thao tác với một giá trị hoặc bằng bộ nhớ, nó sẽ lấy các giá trị này trực tiếp từ các thanh ghi.
Bộ xử lý có một số bộ logic, mỗi bộ có mã máy riêng và bộ thanh ghi riêng.
Các thanh ghi chương trình cơ bản Những thanh ghi này được tất cả các chương trình sử dụng để xử lý dữ liệu số nguyên.
Thanh ghi đơn vị dấu phẩy động (FPU) Các thanh ghi này hoạt động trên dữ liệu dấu phẩy động.
Ngoài ra còn có các thanh ghi MMX và XMM, các thanh ghi này được sử dụng khi bạn cần thực hiện một lệnh trên một lượng lớn Toán hạng

Chúng ta hãy xem xét kỹ hơn các thanh ghi chương trình chính. Chúng bao gồm tám thanh ghi 32 bit mục đích chung: EAX, EBX, ECX, EDX, EBP, ESI, EDI, ESP
Để đặt dữ liệu vào một thanh ghi hoặc xóa dữ liệu từ thanh ghi vào ô nhớ, hãy sử dụng lệnh mov:

Di chuyển eax, 10
nạp số 10 vào thanh ghi eax.

Dữ liệu Mov, ebx
sao chép số có trong thanh ghi ebx vào vị trí bộ nhớ dữ liệu.

Thanh ghi ESP chứa địa chỉ của đỉnh ngăn xếp.
Ngoài các thanh ghi mục đích chung, các thanh ghi chương trình chính bao gồm sáu thanh ghi phân đoạn 16 bit: CS, DS, SS, ES, FS, GS, EFLAGS, EIP
EFLAGS hiển thị các bit, được gọi là cờ, phản ánh trạng thái của bộ xử lý hoặc mô tả tiến trình của các lệnh trước đó.
Thanh ghi EIP chứa địa chỉ lệnh tiếp theo, sẽ được bộ xử lý thực thi.
Tôi sẽ không mô tả các thanh ghi FPU vì chúng ta sẽ không cần đến chúng. Vậy là phần lạc đề ngắn gọn của chúng ta về các thanh ghi và ngăn xếp đã kết thúc, hãy quay lại vấn đề tổ chức bộ nhớ.

Như các bạn còn nhớ, mục đích của bài viết là câu chuyện về sự biến đổi bộ nhớ logic Trên thực tế, về mặt vật lý, vẫn còn một giai đoạn trung gian và chuỗi hoàn chỉnh trông như thế này:

Địa chỉ logic --> Tuyến tính (ảo) --> Vật lý
Toàn bộ không gian địa chỉ tuyến tính được chia thành các phân đoạn. Không gian địa chỉ của mỗi tiến trình có ít nhất ba phân đoạn:
Đoạn mã.(chứa các lệnh từ chương trình của chúng tôi sẽ được thực thi.)
Phân đoạn dữ liệu.(Chứa dữ liệu, nghĩa là các biến)
đoạn ngăn xếp, mà tôi đã viết ở trên.


Địa chỉ tuyến tính được tính bằng công thức:
địa chỉ tuyến tính = Địa chỉ cơ sở của phân đoạn (trong hình đây là phần đầu của phân đoạn) + offset
Đoạn mã
Địa chỉ cơ sở của đoạn mã được lấy từ thanh ghi CS. Giá trị offset cho đoạn mã được lấy từ thanh ghi EIP, nơi lưu trữ địa chỉ của lệnh, sau khi thực hiện giá trị EIP sẽ tăng theo kích thước của lệnh này. Nếu lệnh mất 4 byte thì giá trị EIP sẽ tăng thêm 4 byte và sẽ trỏ đến các hướng dẫn sau. Tất cả điều này được thực hiện tự động mà không cần sự tham gia của lập trình viên.
Có thể có một số đoạn mã trong bộ nhớ của chúng tôi. Trong trường hợp của chúng tôi, chỉ có một.
Phân đoạn dữ liệu
Dữ liệu được nạp vào các thanh ghi DS, ES, FS, GS
Điều này có nghĩa là có thể có tối đa 4 phân đoạn dữ liệu. Trong hình ảnh của chúng tôi, anh ấy ở một mình.
Phần bù trong phân đoạn dữ liệu được chỉ định làm toán hạng của lệnh. Theo mặc định, phân đoạn được trỏ đến bởi thanh ghi DS sẽ được sử dụng. Để nhập một phân đoạn khác, bạn phải chỉ ra trực tiếp điều này trong lệnh tiền tố thay thế phân đoạn.
Phân đoạn ngăn xếp
Đoạn ngăn xếp được sử dụng được xác định bởi giá trị của thanh ghi SS.
Phần bù trong phân đoạn này được biểu thị bằng thanh ghi ESP, thanh ghi này trỏ đến đỉnh ngăn xếp, như bạn nhớ.
Hơn nữa, các phân đoạn trong bộ nhớ có thể chồng lên nhau địa chỉ cơ sở của tất cả các phân đoạn có thể trùng nhau, ví dụ, ở mức 0. Trường hợp suy biến này được gọi là biểu diễn bộ nhớ tuyến tính. TRONG hệ thống hiện đại, bộ nhớ thường được tổ chức theo cách này.

Bây giờ chúng ta hãy xem định nghĩa về các địa chỉ cơ sở của một phân đoạn, tôi đã viết rằng chúng được chứa trong các thanh ghi SS, DS, CS, nhưng điều này không hoàn toàn đúng, chúng chứa một bộ chọn 16 bit nhất định trỏ đến một phân đoạn nhất định bộ mô tả, đã lưu trữ địa chỉ được yêu cầu.


Bộ chọn trông như thế này; mười ba bit của nó chứa chỉ mục của bộ mô tả trong bảng bộ mô tả. Không khó để tính rằng 2^13 = 8192 là số tiền tối đa mô tả trong bảng.
Nói chung, có hai loại bảng mô tả GDT và LDT. Bảng đầu tiên được gọi là bảng mô tả toàn cục, luôn chỉ có một bảng trong hệ thống, địa chỉ bắt đầu của nó, hay đúng hơn là địa chỉ của bộ mô tả số 0 của nó, được lưu trữ trong Thanh ghi hệ thống 48-bit GDTR. Và kể từ thời điểm hệ thống khởi động, nó không thay đổi và không tham gia trao đổi.
Nhưng giá trị của bộ mô tả có thể thay đổi. Nếu bộ chọn chứa bit TI bằng 0, thì bộ xử lý chỉ cần truy cập GDT và tìm kiếm chỉ mục cho bộ mô tả cần thiết để truy cập phân đoạn này.
Cho đến nay mọi thứ đều đơn giản, nhưng nếu TI bằng 1 thì điều này có nghĩa là LDT sẽ được sử dụng. Có rất nhiều bảng kiểu này nhưng chúng được sử dụng trong khoảnh khắc này sẽ là bộ chọn có bộ chọn được tải vào thanh ghi hệ thống LDTR, thanh ghi này, không giống như GDTR, có thể thay đổi.
Chỉ mục bộ chọn trỏ đến một bộ mô tả, bộ mô tả này không còn trỏ đến địa chỉ cơ sở của phân đoạn mà trỏ đến bộ nhớ trong đó bảng mô tả cục bộ được lưu trữ, hay đúng hơn là phần tử 0 của nó. Chà, vậy thì mọi chuyện cũng giống như với GDT. Bằng cách này, trong quá trình hoạt động, các bảng cục bộ có thể được tạo và hủy khi cần thiết. LDT không thể chứa các bộ mô tả cho các LDT khác.
Vì vậy, chúng ta biết cách bộ xử lý tiếp cận bộ mô tả và hãy xem những gì có trong bộ mô tả trong hình:

Bộ mô tả bao gồm 8 byte.
Các bit 15-39 và 56-63 chứa địa chỉ cơ sở tuyến tính của phân đoạn được mô tả bởi bộ mô tả phân đoạn này. Hãy để tôi nhắc bạn về công thức tìm địa chỉ tuyến tính của chúng tôi:

địa chỉ tuyến tính = địa chỉ cơ sở + offset
Với thao tác đơn giản này, bộ xử lý có thể truy cập đến đúng địa chỉ bộ nhớ tuyến tính.
Chúng ta hãy xem các bit khác của bộ mô tả, Giới hạn hoặc giới hạn phân đoạn rất quan trọng, nó có giá trị 20 bit từ 0-15 và 48-51 bit. Giới hạn chỉ định kích thước của phân khúc. Đối với các phân đoạn dữ liệu và mã, tất cả các địa chỉ nằm trong khoảng đều có sẵn:
[căn cứ; cơ sở + giới hạn)
Tùy thuộc vào 55 G-bit (độ chi tiết), giới hạn có thể được đo bằng byte tại giá trị 0 bit và khi đó giới hạn tối đa sẽ là 1 MB hoặc ở giá trị 1, giới hạn được tính bằng trang, mỗi trang là 4kb. Và Kích thước tối đa Phân khúc này sẽ là 4GB.
Đối với phân đoạn ngăn xếp, giới hạn sẽ nằm trong phạm vi:
(cơ sở+giới hạn; trên cùng]
Nhân tiện, tôi thắc mắc tại sao cơ sở và giới hạn lại nằm lởm chởm như vậy trong phần mô tả. Thực tế là các bộ xử lý x86 đã phát triển dần dần và vào thời của 286x, các bộ mô tả có tổng cộng 8 bit, trong khi 2 byte cao nhất được dành riêng, nhưng trong các mẫu bộ xử lý tiếp theo, với dung lượng bit ngày càng tăng, các bộ mô tả cũng tăng lên, nhưng để duy trì sự lạc hậu. khả năng tương thích, chúng tôi phải giữ nguyên cấu trúc .
Giá trị của địa chỉ "top" phụ thuộc vào bit D thứ 54, nếu là 0 thì top là 0xFFF(64kb-1), nếu bit D là 1 thì top là 0xFFFFFFFF (4Gb-1)
Từ 41-43 bit, loại phân đoạn được mã hóa.
000 - phân đoạn dữ liệu, chỉ đọc
001 - phân đoạn dữ liệu, đọc và ghi
010 - phân đoạn ngăn xếp, chỉ đọc
011 - đoạn ngăn xếp, đọc và ghi
100 - đoạn mã, chỉ thực thi
101 - đoạn mã, đọc và thực thi
110 - đoạn mã nô lệ, chỉ thực thi
111 - đoạn mã nô lệ, chỉ thực thi và đọc

44 bit S nếu bằng 1 thì bộ mô tả mô tả một phân đoạn RAM thực, nếu không thì giá trị của bit S là 0.

Bit quan trọng nhất là bit hiện diện P thứ 47. Nếu một bit bằng 1 có nghĩa là phân đoạn hoặc bảng mô tả cục bộ được tải vào RAM, nếu bit này bằng 0 thì có nghĩa là phân đoạn này không có trong RAM, nó nằm trên đĩa cứng, xảy ra ngắt , một trường hợp đặc biệt của hoạt động của bộ xử lý khởi động trình xử lý dịp đặc biệt, tải phân đoạn mong muốn từ ổ cứng vào bộ nhớ, nếu bit P bằng 0 thì tất cả các trường mô tả sẽ mất ý nghĩa và được tự do lưu trữ thông tin dịch vụ trong đó. Sau khi trình xử lý hoàn thành công việc của nó, bit P được đặt thành 1 và bộ mô tả được truy cập lại, phân đoạn này đã có trong bộ nhớ.

Điều này kết thúc việc chuyển đổi địa chỉ logic thành địa chỉ tuyến tính và tôi nghĩ chúng ta nên dừng ở đó. Lần tới tôi sẽ trình bày phần thứ hai của quá trình chuyển đổi tuyến tính sang vật lý.
Và tôi cũng nghĩ rằng cũng nên nói một chút về việc truyền các đối số của hàm và về việc đặt các biến trong bộ nhớ để có mối liên hệ nào đó với thực tế, bởi vì việc đặt các biến trong bộ nhớ là điều bạn phải giải quyết trong công việc của mình chứ không chỉ Đây là những suy đoán lý thuyết dành cho một lập trình viên hệ thống. Nhưng nếu không hiểu cách thức hoạt động của bộ nhớ thì không thể hiểu được các biến tương tự này được lưu trữ trong bộ nhớ như thế nào.
Nói chung, tôi hy vọng nó thú vị và hẹn gặp lại.

Bộ Giáo dục và Khoa học Vùng Nizhny Novgorod

Cơ sở giáo dục ngân sách nhà nước

giáo dục trung cấp nghề

"Trường cao đẳng tỉnh Bor"

Đặc sản 230701 Tin học ứng dụng(theo ngành)

Tiểu luận

Về chủ đề: Cấu trúc của RAM.

Môn học: Hệ điều hành và môi trường.

Hoàn thành:

sinh viên gr. CNTT-41

Rodov A.E.

Đã kiểm tra:

Markov A.V.

Quận nội thành Bor

Giới thiệu

Bộ nhớ truy cập tạm thời(từ tiếng Anh Ngẫu nhiên Truy cập Ký ức) bộ nhớ truy cập tạm thời. ĐẬP ( bộ nhớ truy cập ngẫu nhiên) - một phần dễ bay hơi của hệ thống bộ nhớ máy tính, trong đó tệp thực thi được lưu trữ trong khi máy tính đang chạy. mã máy(chương trình), cũng như dữ liệu trung gian đầu vào, đầu ra được xử lý bởi bộ xử lý.

1. Cấu trúc của RAM

RAM bao gồm các ô, mỗi ô có thể chứa một đơn vị thông tin - một từ máy. Mỗi ô có hai đặc điểm: địa chỉ và nội dung. Thông qua thanh ghi địa chỉ của bộ vi xử lý, bạn có thể truy cập vào bất kỳ ô nhớ nào.

2. Mô hình bộ nhớ phân đoạn

Ngày xửa ngày xưa, vào buổi bình minh của sự ra đời Thiết bị máy tính, RAM rất nhỏ và 2 byte (được gọi là “word”) được sử dụng để đánh địa chỉ nó. Cách tiếp cận này giúp có thể đánh địa chỉ 64 KB bộ nhớ và địa chỉ là tuyến tính - một số duy nhất được sử dụng để biểu thị địa chỉ. Sau này, khi công nghệ được cải tiến, các nhà sản xuất nhận ra rằng có thể hỗ trợ lượng bộ nhớ lớn hơn, nhưng để làm được điều này họ cần làm cho kích thước địa chỉ lớn hơn. Để tương thích với những gì đã được viết phần mềm người ta đã quyết định làm điều này: việc đánh địa chỉ bây giờ là hai thành phần (phân đoạn và bù đắp), mỗi chương trình đều là 16 bit và các chương trình cũ đều sử dụng một thành phần 16 bit và không biết gì về các phân đoạn, đồng thời tiếp tục hoạt động


4. DRAM – Bộ nhớ truy cập ngẫu nhiên động

DRAM- cái này rất loại cũ Chip RAM đã lâu không được sử dụng. Khác biệt DRAM- Cái này bộ nhớ động với thứ tự lấy mẫu ngẫu nhiên. Đơn vị tối thiểu thông tin khi lưu trữ hoặc truyền dữ liệu trong máy tính là một chút. Mỗi bit có thể có hai trạng thái: bật (có, 1) hoặc tắt (không, 0). Bất kỳ lượng thông tin nào cuối cùng đều bao gồm các bit được bật và tắt. Vì vậy, để lưu hoặc truyền bất kỳ lượng dữ liệu nào, cần phải lưu trữ hoặc truyền từng bit, bất kể trạng thái của dữ liệu này.

Để lưu trữ các bit thông tin trong RAM, có các ô. Các tế bào bao gồm các tụ điện và bóng bán dẫn. Đây là sơ đồ gần đúng và đơn giản của một ô DRAM:

Mỗi ô chỉ có thể lưu trữ một bit. Nếu tụ điện được tích điện, điều này có nghĩa là bit đang bật; nếu nó phóng điện thì nó sẽ tắt. Nếu cần lưu trữ một byte dữ liệu, bạn sẽ cần 8 ô (1 byte = 8 bit). Các ô được đặt trong ma trận và mỗi ô có địa chỉ riêng, bao gồm số hàng và số cột.

Bây giờ chúng ta hãy xem việc đọc diễn ra như thế nào. Đầu tiên, tín hiệu RAS (Nhấp nháy địa chỉ hàng) được áp dụng cho tất cả các đầu vào - đây là địa chỉ của hàng. Sau đó, tất cả dữ liệu từ dòng này sẽ được ghi vào bộ đệm. Sau đó, tín hiệu CAS (Nhấp nháy địa chỉ cột) được áp dụng cho thanh ghi - đây là tín hiệu cột và bit có địa chỉ tương ứng được chọn. Bit này được cung cấp cho đầu ra. Nhưng trong quá trình đọc, dữ liệu trong các ô của dòng đọc bị hủy và phải được ghi lại bằng cách lấy từ bộ đệm.

Bây giờ là bản ghi âm. Tín hiệu WR (Ghi) được áp dụng và thông tin được cung cấp cho bus cột không phải từ thanh ghi mà từ thông tin bộ nhớ đầu vào thông qua công tắc, được xác định bởi địa chỉ cột. Do đó, việc truyền dữ liệu khi được ghi được xác định bởi sự kết hợp của các tín hiệu địa chỉ cột, hàng và quyền ghi dữ liệu vào bộ nhớ. Khi ghi, dữ liệu từ thanh ghi hàng không được xuất ra.

Cần lưu ý rằng các ma trận có ô được sắp xếp như sau:

Điều này có nghĩa là không phải một bit sẽ được đọc cùng một lúc mà là nhiều bit. Nếu có 8 ma trận nằm song song thì một byte sẽ được đọc cùng một lúc. Đây được gọi là độ sâu bit. Số lượng đường dọc theo đó dữ liệu sẽ được truyền từ (hoặc đến) các ma trận song song được xác định bởi độ rộng của bus đầu vào/đầu ra của vi mạch.
Khi nói về hoạt động của DRAM, phải tính đến một điểm. Vấn đề là tụ điện không thể lưu trữ điện tích vô thời hạn và cuối cùng nó sẽ “hết điện”. Do đó, tụ điện cần phải được sạc lại. Hoạt động sạc lại được gọi là Làm mới hoặc tái tạo. Hoạt động này xảy ra khoảng 2 mili giây một lần và đôi khi chiếm tới 10% (hoặc thậm chí nhiều hơn) thời gian làm việc của bộ xử lý.

Đặc tính quan trọng nhất của DRAM là tốc độ, hay nói một cách đơn giản, thời lượng chu kỳ + thời gian trễ + thời gian truy cập, trong đó thời lượng chu kỳ là thời gian dành cho việc truyền dữ liệu, thời gian trễ là cài đặt ban đầuđịa chỉ hàng và cột, thời gian truy cập là thời gian tìm kiếm chính ô đó. Lượng rác này được đo bằng nano giây (một phần tỷ giây). Chip bộ nhớ hiện đại có tốc độ dưới 10 ms.

RAM được điều khiển bởi bộ điều khiển nằm trong chipset bo mạch chủ, hay đúng hơn là ở phần đó được gọi là North Bridge.

Và bây giờ, khi đã hiểu cách hoạt động của RAM, hãy tìm hiểu lý do tại sao nó lại cần thiết. Sau bộ xử lý, RAM có thể coi là thiết bị có tốc độ nhanh nhất. Do đó, việc trao đổi dữ liệu chính diễn ra giữa hai thiết bị này. Tất cả thông tin trong máy tính cá nhânđược lưu trữ trên ổ cứng. Khi bạn bật máy tính, trình điều khiển, chương trình đặc biệt và các thành phần của hệ điều hành sẽ được ghi vào RAM (Bộ nhớ truy cập ngẫu nhiên) từ vít. Sau đó những chương trình - ứng dụng mà bạn khởi chạy sẽ được ghi lại ở đó. Khi bạn đóng các chương trình này, chúng sẽ bị xóa khỏi RAM. Dữ liệu được ghi trong RAM được chuyển đến CPU (Bộ xử lý trung tâm), nơi nó được xử lý và ghi lại. Và vì vậy, mọi lúc: họ đưa ra lệnh cho bộ xử lý lấy các bit ở các địa chỉ đó, bằng cách nào đó xử lý chúng ở đó và trả chúng về vị trí của chúng hoặc ghi chúng vào một địa chỉ mới - anh ấy đã làm đúng như vậy.

Tất cả điều này đều tốt miễn là có đủ ô RAM. Và nếu không? Sau đó, tập tin trao đổi sẽ hoạt động. Tệp này nằm trên ổ cứng và mọi thứ không vừa với các ô RAM đều được ghi vào đó. Do tốc độ của vít thấp hơn đáng kể so với RAM nên hoạt động của tệp hoán trang sẽ làm hệ thống chậm đi rất nhiều. Ngoài ra, nó còn làm giảm tuổi thọ của ổ cứng.

Việc tăng dung lượng bộ nhớ không dẫn đến tăng hiệu suất của nó. Việc thay đổi kích thước bộ nhớ sẽ không ảnh hưởng đến hoạt động của nó dưới bất kỳ hình thức nào. Nhưng nếu chúng ta xem xét hoạt động của hệ thống thì lại là một vấn đề khác. Nếu bạn có đủ RAM, việc tăng âm lượng sẽ không dẫn đến tăng tốc độ hệ thống. Nếu không có đủ ô RAM thì việc tăng số lượng của chúng (hay nói cách khác là thêm cái mới hoặc thay cái cũ bằng cái mới có dung lượng bộ nhớ lớn hơn) sẽ tăng tốc hệ thống.

Mỗi ô nhớ có một địa chỉ duy nhất, tức là khác với tất cả các ô nhớ khác. Trong trường hợp này, bộ nhớ chính có một không gian địa chỉ duy nhất cho RAM và các thiết bị lưu trữ cố định. Không gian địa chỉ xác định số lượng ô nhớ chính tối đa có thể được đánh địa chỉ trực tiếp. Nó phụ thuộc vào độ rộng của các bus địa chỉ, vì số lượng địa chỉ khác nhau tối đa được xác định bởi sự đa dạng số nhị phân, với sự trợ giúp của các địa chỉ này được đại diện. Đổi lại, sự đa dạng này phụ thuộc vào số lượng chữ số. Do đó, không gian địa chỉ bằng , trong đó là độ rộng bit của bus mã địa chỉ.

Ví dụ 3.5. Bộ xử lý Intel 8086 (1978) có bus mã địa chỉ 20 bit. Trong trường hợp này, 2 20 ô có dung lượng 1 byte mỗi ô có thể được đánh địa chỉ trực tiếp. Do đó, không gian địa chỉ sẽ là 2 20 byte = 1 MB.

Bộ xử lý Intel 80486 (1989) có bus mã địa chỉ 32 bit. Không gian địa chỉ của nó là 2 32 byte = 2 2 2 30 byte = 2 2 GB = 4 GB.

Bắt đầu với bộ xử lý Intel Pentium Pro (1995) đã giới thiệu khả năng sử dụng chế độ Mở rộng Địa chỉ Vật lý (PAE), sử dụng 36 bit để đánh địa chỉ. Trong trường hợp này, 2 36 byte = 2 6 · 2 30 byte = 2 6 GB = 64 GB có thể được giải quyết.

Có hai cách để đánh địa chỉ bộ nhớ trong máy tính - chế độ thực và chế độ được bảo vệ. Chế độ thựcđược sử dụng trong hệ điều hành MS DOS. Tính toán địa chỉ vật lý trong chế độ thựcđược thực hiện theo nguyên tắc

CS 16 10 16 + IP 16,

trong đó CS, IP là các giá trị phân đoạn và offset được chỉ định trong các thanh ghi bộ xử lý tương ứng.

Vì vậy, địa chỉ vật lý tối đa là

FFFF 16 10 16 + FFFF 16 = FFFF0 16 + FFFF 16 = 10FFEF 16 = 1114095 10,

và không gian địa chỉ là 1114096 byte = 1 MB + 64 KB – 16 byte.

Ngoài ra, không gian địa chỉ này có thể bị giới hạn bởi độ rộng của bus mã địa chỉ bộ xử lý Intel 8086, tức là bởi số 2 20 byte = 1 MB.

Phần RAM không thể xử lý trực tiếp được gọi là bộ nhớ mở rộng.

Ví dụ 3.6. Máy tính này dựa trên bộ xử lý Intel 80486 và có 16 MB RAM. Bộ xử lý có thể xử lý trực tiếp 1 MB + 64 KB – 16 byte RAM. Khi đó bộ nhớ mở rộng sẽ là 16 MB -
–(1 MB + 64 KB – 16 byte) = 15 MB – 64 KB + 16 byte.

Vì vậy, mối quan hệ giữa bộ nhớ có thể định địa chỉ trực tiếp và bộ nhớ mở rộng sẽ là:

1.114.096 byte: 15.663.120 byte hoặc 6,64: 93,36.

Do đó, ở chế độ hoạt động thực, hơn 90% RAM của máy tính sẽ không thể truy cập được.

Có hai cách để truy cập bộ nhớ mở rộng ở chế độ máy tính thực. Tuy nhiên, chúng chỉ có thể thực hiện được khi sử dụng các chương trình đặc biệt - trình điều khiển theo thông số kỹ thuật XMS và EMS.

Tài xếchương trình đặc biệt, quản lý công việc RAM hoặc thiết bị bên ngoài máy tính và tổ chức trao đổi thông tin giữa bộ xử lý, RAM và các thiết bị bên ngoài.

Ghi chú. Trình điều khiển điều khiển hoạt động của bộ nhớ được gọi là trình quản lý bộ nhớ.

Truy cập vào bộ nhớ mở rộng theo đặc tả XMS ( Thông số bộ nhớ mở rộng) được tổ chức bằng trình điều khiển loại XMM (ví dụ: HIMEM.SYS). Theo đặc điểm kỹ thuật của EMS ( Thông số bộ nhớ mở rộng) quyền truy cập vào bộ nhớ mở rộng được triển khai bằng cách ánh xạ, nếu cần, các trường riêng lẻ của nó vào một vùng cụ thể của bộ nhớ có thể định địa chỉ trực tiếp. Trong trường hợp này, không phải thông tin đang được xử lý được lưu trữ mà chỉ có các địa chỉ cung cấp quyền truy cập vào thông tin đó. Để sắp xếp bộ nhớ theo thông số kỹ thuật của EMS, trình điều khiển EMM EMM386.EXE hoặc Quarterdeck được sử dụng.

TRONG chế độ bảo vệ Trong quá trình vận hành máy tính, bộ nhớ có dung lượng lớn hơn trong đời thực có thể được xử lý trực tiếp bằng cách thay đổi cơ chế đánh địa chỉ. Nhờ chế độ được bảo vệ, chỉ phần chương trình cần thiết vào thời điểm hiện tại mới có thể được lưu trữ trong bộ nhớ. Phần còn lại có thể được lưu trữ trong bộ nhớ ngoài của máy tính, chẳng hạn như ổ cứng. Khi truy cập vào một phần của chương trình hiện không có trong bộ nhớ, hệ điều hành tạm dừng chương trình, tải đoạn cần thiết từ bộ nhớ ngoài Mã chương trình rồi tiếp tục thực hiện chương trình. Thủ tục này được gọi là trao đổi dữ liệu từ ổ cứng. Do đó, ở chế độ được bảo vệ, có thể thực thi các chương trình có kích thước mã vượt quá dung lượng RAM trên máy tính.

Một địa chỉ vật lý ở chế độ được bảo vệ được hình thành như sau. Thanh ghi phân đoạn bộ xử lý lưu trữ hai byte bộ chọn, trong đó có chứa các thông tin sau:

■ chỉ số sự mô tả(13 bit) trong bảng mô tả;

■ cờ (1 bit) xác định bảng nào trong hai bảng mô tả (cục bộ hoặc toàn cục) sẽ được truy cập;

■ mức đặc quyền được yêu cầu (2 bit).

Phù hợp với giá trị của bộ chọn, quyền truy cập được thực hiện tới bảng mong muốn bộ mô tả và bộ mô tả nằm trong đó. Địa chỉ phân đoạn, kích thước và quyền truy cập của nó được trích xuất từ ​​bộ mô tả. Địa chỉ phân đoạn sau đó được thêm vào phần bù từ thanh ghi IP của bộ xử lý. Số lượng kết quả sẽ là địa chỉ vật lý của ô RAM.

Việc sử dụng chế độ được bảo vệ giúp có thể giải quyết bộ xử lý Intel 80286 (1982) 2 24 byte = 2 4 2 20 byte = 16 MB bộ nhớ, trong khi không gian địa chỉ chế độ thực vẫn bị giới hạn ở 1 MB.

Ngoài việc tăng không gian địa chỉ, trong chế độ được bảo vệ, có thể thực hiện song song một số chương trình ( chế độ đa nhiệm). Chế độ đa nhiệm được tổ chức bằng hệ điều hành đa nhiệm (ví dụ: Microsoft Windows), mà bộ xử lý cung cấp một cơ chế mạnh mẽ và đáng tin cậy để bảo vệ các tác vụ lẫn nhau bằng hệ thống đặc quyền bốn cấp (Hình 3.7).

Ở chế độ được bảo vệ cũng có thể tổ chức bộ nhớ phân trang. Nó liên quan đến việc hình thành các bảng mô tả bộ nhớ để xác định trạng thái của các phân đoạn (trang) riêng lẻ của nó. Khi không đủ bộ nhớ, hệ điều hành sẽ ghi một số dữ liệu vào bộ nhớ ngoài và nhập thông tin vào bảng mô tả về việc thiếu dữ liệu này trong RAM.

Cơm. 3.7. Các mức đặc quyền khi sử dụng chế độ đa nhiệm