--------------- <> -----------------
--- KHOA HỌC - CÔNG NGHỆ - GIÁO DỤC - VIỆC LÀM ---
--- Học để đi cùng bà con trên thế giới ---

Tìm kiếm trong Blog

Hiển thị các bài đăng có nhãn hệ điều hành. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn hệ điều hành. Hiển thị tất cả bài đăng

Hệ điều hành (5) - Quản lý bộ nhớ & bộ nhớ ảo

Bài trước: Hệ điều hành (4) - Liên lạc và đồng bộ hóa giữa các tiến trình
-----

6         Quản lý bộ nhớ


6.1       Các vấn đề phát sinh khi quản lý bộ nhớ


6.1.1       Chuyển đổi địa chỉ tương đối sang tuyệt đối



6.1.2       Không gian địa chỉ ảo và không gian địa chỉ vật lý



6.1.3       Quản lý bộ nhớ đã cấp phát và chưa cấp phát



Các thuật toán chọn vùng trống

– First-fit: chọn đoạn trống đầu tiên đủ lớn

– Best-fit: chọn đoạn trống nhỏ nhất nhưng đủ lớn để thỏa mãn nhu cầu

– Worst-fit : chọn đoạn trống lớn nhất




6.2       Các mô hình cấp phát bộ nhớ


– Mô hình cấp phát liên tục: tiền trình được nạp vào một vùng nhớ liên tục

– Mô hình cấp phát không liên tục: tiến trình được nạp vào một vùng nhớ không liên tục


6.2.1       Mô hình cấp phát liên tục


– Mô hình linker-loader

– Mô hình base & limit


6.2.2       Mô hình cấp phát không liên tục



– Mô hình phân đoạn

(đọc thêm phần cài đặt)

– Mô hình phân trang (paging)


7         Bộ nhớ ảo


7.1       Phân trang theo yêu cầu


7.2       Các thuật toán phân trang


7.3       Thực hành


7.4       Câu hỏi ôn tập



--------
Cập nhật: [05/11/2019]
-------
Danh sách các bài học

Hệ điều hành (3) - Quản lý tiến trình

Bài trước: Hệ điều hành (2) - Hệ thống quản lý tập tin
-----

4         Quản lý tiến trình


4.1       Thành phần cơ bản của một hệ thống máy tính


Trong đó,

– Bộ xử lý (Processor) – một bộ -> CPU (central processing unit)

– Bộ nhớ chính (Main Memory): không có khả năng duy trì thông tin khi shutdown (volatile). Cũng được gọi real memory hoặc primary memory

– Thành phần nhập xuất (I/O module): các loại bộ nhớ phụ, thiết bị giao tiếp, thiết bị đầu cuối (terminal)


– Bus hệ thống (System bus): giúp quá trình giao tiếp giữa processor, memory, và I/O modules

4.2       Chu trình đọc và thực thi lệnh




– Vi xử lý đọc (fetch) lệnh từ bộ nhớ

+ Bộ đếm chương trình (Program counter (PC)) chứa địa chỉ của lệnh kế tiếp sẽ được đọc

+ Lệnh đã được đọc, được lưu trong thanh ghi lệnh (instruction register (IR))

+ Bộ đếm chương trình sẽ tăng lên 1 sau khi đọc 1 lệnh từ bộ nhớ

– Sau đó Vi xử lý sẽ thực thi lệnh trong thanh ghi IR

Ví dụ:

Thanh ghi IR có độ dài 16 bit. Cấu trúc của một lệnh được chia thành hai phần: bốn bit đầu là mã lệnh (opcode) --> có thể thể hiện được 16 lệnh khác nhau, mười hai bit tiếp theo là địa chỉ truy cập bộ nhớ --> có thể truy cập tới 4096 (4K) từ nhớ khác nhau. Được biểu diễn bằng ba số hexadecimal.


Một đoạn thực thi chương trình:


Một số mã lệnh:

Quá trình thực thi lệnh (trang 13):

– Nạp dữ liệu từ địa chỉ 940 của bộ nhớ vào thanh ghi AC.

– Cộng thanh ghi AC với giá trị tại địa chỉ 941 của bộ nhớ. Kết quả để trên thanh ghi AC.

– Ghi dữ liệu trên thanh ghi AC vào bộ nhớ tại địa chỉ 941.


4.3       Khái niệm về tiến trình


Tiến trình là một chương trình đang xử lý, mỗi tiến trình có một không gian địa chỉ, một con trỏ lệnh, một tập các thanh ghi và stack riêng. Tiến trình có thể cần đến một số tài nguyên như CPU, bộ nhớ chính, các tập tin và thiết bị nhập/xuất. Hệ điều hành sử dụng bộ điều phối (scheduler) để quyết định thời điểm cần dừng hoạt động của tiến trình đang xử lý và lựa chọn tiến trình tiếp theo cần thực hiện. Trong hệ thống có những tiến trình của hệ điều hành và tiến trình của người dùng.

– Xem processes trong Task Manager.

Đọc thêm trang 46,

4.4       Khái niệm tiểu trình (thread)


Một tiến trình có thể tạo nhiều tiểu trình, mỗi tiểu trình thực hiện một chức năng nào đó và thực thi đồng thời cũng bằng cách chia sẻ CPU. Các tiểu trình trong cùng một tiến trình dùng chung không gian địa chỉ tiến trình nhưng có con trỏ lệnh, tập các thanh ghi và stack riêng. Một tiểu trình cũng có thể tạo lập các tiểu trình con, và nhận các trạng thái khác nhau như một tiến trình.

Đọc thêm trang 47, 48, 49, 50:


4.5       Các trạng thái của tiến trình


Đọc trang 51,

4.6       Các giải thuật/thuật toán điều phối tiến trình


Trang 58,


– Giải thuật FCFS

– Giải thuật SJF

– Giải thuật P

– Giải thuật RR

– Giải thuật MQ

– Giải thuật MFQ

Tính thời gian chờ trung bình.

Xem thêm:

https://www.youtube.com/watch?v=qa8labtyDXk


4.7       Thực hành

4.7.1 Cài đặt tiểu trình

[Program.cs]

using System;

using System.Threading;

class Program

{

    private int iterations;

    private string message;

    private int delay;

 

    public Program(int iterations, string message, int delay)

    {

        this.iterations = iterations;

        this.message = message;

        this.delay = delay;

    }

 

    public void MyThread() // tạo tiểu trình

    {

        Thread thread = new Thread(DisplayMessage); // tạo tiểu trình trỏ tới một hàm cụ thể

        Console.WriteLine("{0}:Starting new thread.",DateTime.Now.ToString("HH:mm:ss.ffff"));

        thread.Start(); // chạy tiểu trình

    }

 

    public void DisplayMessage() // hàm sẽ được chạy dưới hình thức một tiểu trình

    {

        for(int count = 0; count < iterations; count++)

        {

            Console.WriteLine("{0}:{1}", DateTime.Now.ToString("HH:mm:ss.ffff"), message);

            Thread.Sleep(delay);

        }

    }

    static void Main(string[] args)

    {

        Program example = new Program(500, "A thread example.", 500);

        example.MyThread(); // gọi và thực thi tiểu trình từ chương trình chính (main)

        for(int count = 0; count < 1000; count++)

        {

            Console.WriteLine("{0} : Continue processing...",

                DateTime.Now.ToString("HH:mm:ss.ffff"));

            Thread.Sleep(500);

        }

        Console.WriteLine("Main method complete. Press Enter.");

    }

}

 

Giải thích để hiểu đoạn mã ở trên

Trước khi giải thích các đoạn mã ở trên, cần tìm hiểu ngắn gọn một số khái niệm liên quan.

Phần mềm máy tính là tập hợp các lệnh và dữ liệu, được dùng để hướng dẫn máy tính thực hiện các chức năng cụ thể.

Tập hợp các lệnh được gọi là chương trình.

Một chương trình có thể ở trạng thái tĩnh là các lệnh đang được lưu trong các tập tin trên đĩa cứng.

Một chương trình có thể ở trạng thái động là các lệnh đang được thực thi trong RAM và CPU.

Tiến trình là một chương trình ở trạng thái động, mỗi tiến trình có một không gian địa chỉ (trong RAM), một con trỏ lệnh, một tập các thanh ghi (trong CPU) và stack riêng. Tiến trình có thể cần đến một số tài nguyên như CPU, bộ nhớ chính, các tập tin và thiết bị nhập/xuất.

Quá trình chạy của một tiến trình:


Tiến trình trên RAM:





Chạy chương trình Program.cs và xem tiến trình trong Task Manager (thiết lập vòng lặp trong hàm Main khoảng 1000 lần để dễ quan sát):



Tiểu trình là gì?

Một tiến trình có thể tạo nhiều tiểu trình, mỗi tiểu trình thực hiện một chức năng cụ thể.

Các tiểu trình trong cùng một tiến trình dùng chung không gian địa chỉ của tiến trình nhưng có con trỏ lệnh, tập các thanh ghi và stack riêng.

Tiểu trình cũng là đơn vị xử lý cơ bản trong hệ thống, nó cũng xử lý tuần tự đoạn mã của nó, các tiểu trình cũng chia sẻ thời gian xử lý của CPU như các tiến trình.

Các tiểu trình trong một tiến trình chia sẻ một không gian địa chỉ chung, điều này có nghĩa các tiểu trình có thể chia sẻ các biến toàn cục của tiến trình, có thể truy xuất đến stack của tiểu trình khác trong cùng tiến trình. Như vậy với mô hình tiểu trình, trong hệ thống có thể tồn tại nhiều dòng xử lý cùng chia sẻ một không gian địa chỉ bộ nhớ, các dòng xử lý này hoạt động song song với nhau.



Giải thích đoạn mã trong Program.cs:

Chương trình Program.cs gồm hai tiểu trình: tiểu trình chính (Main) và tiểu trình example.

Để tạo thread trong C#:

Bước 1: Tạo một hàm cần thực thi riêng biệt, song song với tiểu trình chính (hàm Main). Ví dụ:

public void DisplayMessage() // hàm sẽ được chạy dưới hình thức một tiểu trình

    {

        for(int count = 0; count < iterations; count++)

        {

            Console.WriteLine("{0}:{1}", DateTime.Now.ToString("HH:mm:ss.ffff"), message);

            Thread.Sleep(delay);

        }

    }

Bước 2: Tạo tiểu trình bằng cách tạo ra một đối tượng thuộc lớp Thread, truyền vào phương thức khởi tạo tên hàm đã được tạo ở bước 1; gọi phương thức Start() để chạy tiểu trình. Ví dụ:  

public void MyThread() // tạo tiểu trình

    {

        Thread thread = new Thread(DisplayMessage); // tạo tiểu trình trỏ tới một hàm cụ thể

        Console.WriteLine("{0}:Starting new thread.",DateTime.Now.ToString("HH:mm:ss.ffff"));

        thread.Start(); // chạy tiểu trình

    }

Bước 3: Chạy tiểu trình chính (hàm Main), trong tiểu trình chính sẽ gọi tiểu trình được tạo ra ở Bước 2. Ví dụ:

    static void Main(string[] args)

    {

        Program example = new Program(500, "A thread example.", 500);

        example.MyThread(); // gọi và thực thi tiểu trình từ chương trình chính (main)

        for(int count = 0; count < 1000; count++)

        {

            Console.WriteLine("{0} : Continue processing...",

                DateTime.Now.ToString("HH:mm:ss.ffff"));

            Thread.Sleep(500);

        }

        Console.WriteLine("Main method complete. Press Enter.");

    }

Quan sát kết quả sẽ thấy các câu thông báo của hàm Main() và hàm DisplayMessage() được hiển thị đan xen nhau (do chạy song song). Trong các tiểu trình có dùng lệnh Sleep() để dừng chương trình một thời gian, giúp quan sát kết quả dễ hơn.

4.7.2 Tiểu trình dùng chung vùng nhớ

Như đã đề cập trong phần khái niệm tiểu trình: các tiểu trình trong cùng một tiến trình sẽ dùng chung không gian địa chỉ của tiến trình (trong RAM) nhưng có con trỏ lệnh, tập các thanh ghi và stack riêng.

Phần này sẽ viết một chương trình gồm tiểu trình chính (hàm Main) và hai tiểu trình con. Hai tiểu trình con sẽ tham chiếu tới cùng một biến (một vùng nhớ trên RAM). Biến dùng chung giữa hai tiểu trình con có tên là count; hai tiểu trình con có tên là TieuTrinhCong và TieuTrinhTru.

Ý tưởng của chương trình:

– Gán cho biến count giá trị ban đầu (ví dụ: count = 10)

– Tiểu trình chính (hàm Main) sẽ gọi hai tiểu trình con

– TieuTrinhCong(): sẽ tăng liên tục biến count lên 2500 lần

– TieuTrinhTru(): sẽ giảm liên tục biến count lên 2500 lần

– Sau khi chạy xong hai tiểu trình con, sẽ xuất giá trị của biến count trong tiểu trình chính để quan sát kết quả của biến count.

[Thread_Cong_Tru.cs]

using System;

using System.Threading;

class Thread_Cong_Tru

{

    private int count = 10;

 

    public void HamCong()

    {

        for(int i = 0; i < 2500; i++)

        {

            count = count + 1;

            Console.WriteLine("Gia tri count trong ham cong: " + count);

            Thread.Sleep(300);

        }

    }

    public void HamTru()

    {

        for (int i = 0; i < 2500; i++)

        {

            count = count - 1;

            Console.WriteLine("Gia tri count trong ham tru: " + count);

            Thread.Sleep(300);

        }

    }

static void Main(string[] args)

    {

        Thread_Cong_Tru test = new Thread_Cong_Tru();

        Console.WriteLine("Gia tri khoi tao cua bien count (trong tieu trinh Main): " + test.count);

        // tạo và chạy tiểu trình cộng

        Thread TieuTrinhCong = new Thread(test.HamCong);

        TieuTrinhCong.Start();

        // tạo và chạy tiểu trình trừ

        Thread TieuTrinhTru = new Thread(test.HamTru);

        TieuTrinhTru.Start();

        Console.WriteLine("Gia tri ket thuc cua bien count (trong tieu trinh Main): " + test.count);

    }

}

// Giá trị của biến count có thể là 9, 10, 11, 12, 13: do biến dùng chung này bị thao tác cùng lúc từ hai tiểu trình nên không thể kiếm soát được giá trị. Đây là lý do cần phải đồng bộ hóa giữa các tiến/tiểu trình.

---------------------------------------


Lab 8. Viết chương trình cho phép nhập một số nguyên dương, tìm các số nguyên tố và số chính phương từ 0 tới số vừa nhập. Sử dụng phương pháp lập trình tuần tự, nghĩa là cho người dùng nhập vào một số, chương trình sẽ chạy chức năng tìm và xuất số nguyên dương ra màn hình trước, sau đó sẽ chạy chức năng tìm và xuất số chính phương ra màn hình. (sử dụng ngôn ngữ lập trình tùy chọn)


Lab 9. Viết chương trình cho phép nhập một số nguyên dương, tìm các số nguyên tố và số chính phương từ 0 tới số vừa nhập. Sử dụng phương pháp lập trình đa tiểu trình. Xem ví dụ tham khảo: Cài đặt đa tiểu trình (multipthreading) bằng ngôn ngữ C#. https://www.youtube.com/watch?v=HCrZyk_r6i0


Lab 10. Cài đặt đa tiểu trình cho bài toán đếm xuôi và đếm ngược cùng lúc. Xem giao diện:


– Người dùng nhập một số, bấm vào nút Đếm xuôi và Đếm ngược, máy tính sẽ thực hiện đếm và xuất ra màn hình.

4.8       Câu hỏi ôn tập


1.      Trong CPU, thanh ghi PC là viết tắt của:

A. Personal Computer

B. Professional Computer

C. Program Control

D. Program Counter

2.      Trong CPU, thanh ghi IR là viết tắt của:

A. Increment Register

B. Instruction Register

C. Index Register

D. Identifier Register

3.      Diễn giải quá trình thực thi của chương trình tại mục “Chu trình đọc và thực thi lệnh - Một đoạn thực thi chương trình”.

4.      Phân biệt tiến trình và tiểu trình?

5.      Hiểu và tính thời gian chờ trung bình của các giải thuật lập lịch CPU (điều phối tiến trình) sau: FCFS, P, SJF. Tham khảo: https://www.youtube.com/watch?v=EnXUx082wYg
--------
Cập nhật: [1/6/2021]
-------
Bài tiếp theo: Hệ điều hành (4) - Liên lạc và đồng bộ hóa giữa các tiến trình
Danh sách các bài học
-----
Bạn muốn tự học HTML bài bản? Xem thêm

Nhập môn CNTT (3) - Hệ điều hành

Bài trước: Nhập môn CNTT (2) - Biểu diễn thông tin trong máy tính
---

4         Hệ điều hành

4.1       Nội dung học


Xem clip:


Đọc slide bài giảng:


Đọc giáo trình (từ trang 37 đến trang 83)

4.2       Thực hành


Làm bài Lab 01: Làm quen với hệ điều hành Windows

4.3       Câu hỏi ôn tập


Câu 1: Trong kĩ thuật gõ bàn phìm bằng mười ngón tay (touch typing), ngón trỏ phải đặt vào chữ nào?

A. C  | B. K  |  C. J  |  D. F

Câu 2: Trong kĩ thuật gõ bàn phìm bằng mười ngón tay (touch typing), ngón trỏ trái đặt vào chữ nào?

A. C  |  B. K  |  C. J  |  D. F

Câu 3: Trong kĩ thuật gõ bàn phìm bằng mười ngón tay (touch typing), gõ phím Shift bằng ngón nào?

A. ngón cái  |  B. ngón út | C. ngón áp út | D. ngón trỏ

Câu 4: Bảng mã nào được khuyến khích sử dụng?

A. Unicode | B. TCVN3 | C. VNI-Windows | D. VIQR

Câu 5: Kiểu gõ nào được đánh giá là gõ nhanh hơn?

A. Telex | B. VNI | C. tự định nghĩa |  D. cả ba đáp án đều đúng

Câu 6: Các bộ phông (font) chữ được sử dụng nhiều ở Việt Nam?

A. Times New Roman  |  B. họ VNI-  |  C. họ .vn-  |  D. cả ba bộ phông trên

Câu 7: Product key của hệ điều hành để làm gì?

A. đặt tên cho máy tính | B. đặt tên cho hệ điều hành
C. xác định người dùng hợp pháp | D. cả ba câu trên đều sai

Câu 8: Tắt máy tính hợp lệ là?

A. rút điện | B. tắt màn hình | C. Shutdown | D. cả ba đáp án đều đúng

Câu 9: Nên chia đĩa cứng thành?

A. chỉ một ổ C:\  |  B. ít nhất gồm: C:\, và D:\ 
C. không cần chia  |  D. cả ba lựa chọn trên đều tốt

Câu 10: Nên để dữ liệu ở ổ đĩa nào (ổ C:\ cài hệ điều hành)?

A. C:\  | B. không phải ổ C:\
C. ở ổ nào cũng được  | D. cả ba đáp án đều sai

Câu 11: Nên lưu dự phòng những phần nào?

A. ổ đĩa cài đặt Hệ điều hành, thư mục dữ liệu làm việc  |  B. tất cả đĩa cứng

C. ổ đĩa cài đặt Hệ điều hành  |  D. thư mục dữ liệu làm việc

/// Hết buổi 3
-----
Cập nhật 21/1/2019
-----
Đọc thêm:
- Nhập môn CNTT (4) - Soạn thảo văn bản
- Danh sách các bài học

Hệ điều hành (2) - Hệ thống quản lý tập tin

Bài trước: Hệ điều hành (1) - Tổng quan
-----

3         Hệ thống quản lý tập tin

3.1       Một số khái niệm


Xem clip số 6: đặt vấn đề (clip này bị lặp lại một số đoạn)


Máy tính phải có khả năng lưu trữ dữ liệu, thông tin. Ví dụ dữ liệu bao gồm văn bản, hình ảnh, âm thanh, video, mã nguồn, mã thực thi. Hệ thống quản lý tập tin có nhiệm vụ lưu trữ, quản lý, truy xuất dữ liệu, thông tin vào/từ các loại đĩa.

Hệ thống quản lý tập tin chịu trách nhiệm tổ chức, sắp xếp dữ liệu một cách hợp lý, để tối ưu việc lưu trữ, chia sẻ và truy cập.

Phần này sẽ tìm hiểu về một số phương pháp được thiết kế để quản lý tập tin, từ đơn giản đến phức tạp. Làm một số bài thực hành để hiểu hơn về hệ thống quản lý tập tin.

Một số chủ đề cần nắm, sau khi học xong chương này: Đĩa cứng, Phân vùng đĩa, Ổ đĩa logic, Thư mục, Tập tin, Track, Cluster, Sector, Cylinder, Head, MBR và GPT, FAT, NTFS, I-nodes.

Xem clip số 7: một số khái niệm (tập tin, thư mục, volume)


Đọc thêm trang 24, tài liệu môn Hệ điều hành:


Xem clip số 15 (tiếng Anh):


Nhớ lại vai trò trung gian của Hệ điều hành:

Với người dùng
Vai trò trung gian
Đối tượng phần cứng
Processes/Threads
<= OS =>
CPU
Address Space
<= OS =>
Memory
Files
<= OS =>
Disk

Hệ điều hành giúp chuyển đổi các đối tượng có tính trừu tượng (Files) thành các đối tượng vật lý (Disk).

Cụ thể:

Files
Vai trò trung gian
Disk
Open(), Close(), Read(), Write()
<= OS =>
Sector, Track, Seek(), ReadBlock(), WriteBlock()

3.1.1       Đĩa cứng


Đọc về đĩa cứng trên wiki:


Theo wiki: “Ổ đĩa cứng, hay còn gọi là ổ cứng (tiếng Anh: Hard Disk Drive, viết tắt: HDD) là thiết bị dùng để lưu trữ dữ liệu trên bề mặt các tấm đĩa hình tròn phủ vật liệu từ tính.” Đĩa cứng là bộ nhớ ngoài, không bị mất dữ liệu khi mất nguồn điện (non-volatile).

Xem hình về cấu tạo bên trong đĩa cứng (HDD):



Platter (đĩa từ), Spindle (trục quay đĩa từ), Head (đầu đọc/ghi dữ liệu), Actuator Arm (cần di chuyển đầu đọc), Actuator Axis (trục truyền động), Power Connector (chân nguồn điện), Jumper Block (khối thiết đặt chế độ làm việc – master/slave), IDE Connector (cổng truyền dữ liệu), Actuator (bộ truyền động).

SSD

Theo Wiki: “SSD (tiếng Anh: Solid State Drive - Ổ lưu trữ thể bền vững hay Ổ cứng điện tử), trong tiếng Việt có một số tên khác trong đời sống như Ổ cứng thể rắn hoặc Ổ lưu trữ bán dẫn là một thiết bị lưu trữ sử dụng bộ nhớ flash để lưu trữ dữ liệu trên máy tính một cách bền vững. Một ổ SSD đồng thời mô phỏng quá trình lưu trữ và truy cập dữ liệu giống như ổ đĩa cứng (HDD) thông thường và do đó dễ dàng được sử dụng cho nhiều mục đích khác nhau. Ổ SSD sử dụng SRAM hoặc DRAM hoặc bộ nhớ Flash để lưu dữ liệu.”

Xem hình minh họa,



1.1.2       Track, Cylinder, Sector, Platter, Cluster


Xem hình minh họa,



– Platter: đĩa từ, làm bằng nhôm hoặc thủy tinh, trên bề mặt được phủ một lớp vật liệu từ tính, là nơi chứa dữ liệu. Mỗi đĩa từ có thể sử dụng hai mặt, đĩa cứng có thể có nhiều đĩa từ, chúng gắn song song, quay đồng trục, cùng tốc độ với nhau khi hoạt động.

– Track: rãnh, trên một mặt làm việc của đĩa từ chia ra nhiều vòng tròn đồng tâm thành các track. Track trên ổ đĩa cứng không cố định từ khi sản xuất, chúng có thể thay đổi vị trí khi định dạng cấp thấp ổ đĩa (low-level format ).

– Cylinder: trụ, tập hợp các track cùng bán kính (cùng số hiệu trên) ở các mặt đĩa khác nhau thành các cylinder.

– Sector: cung từ, trên track chia thành những phần nhỏ bằng các đoạn hướng tâm thành các sector. Các sector là phần nhỏ cuối cùng được chia ra để chứa dữ liệu. Theo chuẩn thông thường thì một sector chứa dung lượng 512 byte.


– Cluster: liên cung, là một đơn vị lưu trữ gồm một hoặc nhiều sector. 

3.1.3       Partition/Logic Drive


Partition

Theo wiki: [Disk partitioning or disk slicing is the creation of one or more regions on secondary storage, so that each region can be managed separately. These regions are called partitions. It is typically the first step of preparing a newly installed disk, before any file system is created. The disk stores the information about the partitions' locations and sizes in an area known as the partition table that the operating system reads before any other part of the disk. Each partition then appears to the operating system as a distinct "logical" disk that uses part of the actual disk. System administrators use a program called a partition editor to create, resize, delete, and manipulate the partitions. Partitioning allows the use of different filesystems to be installed for different kinds of files. Separating user data from system data can prevent the system partition from becoming full and rendering the system unusable. Partitioning can also make backing up easier. A disadvantage is that it can be difficult to properly size partitions resulting in having one partition with much free space and another nearly totally allocated.]

– Partition là một phân vùng (region) đĩa, có thể quản lý độc lập

– Trước khi sử dụng đĩa cứng cần tạo ra các phân vùng, sau đó lựa chọn loại hệ thống tập tin sẽ được áp dụng cho phân vùng (ví dụ FAT, NTFS)

– Thông tin về vị trí, kích thước của phân vùng được chứa trong partiton table

– Khi khởi động, hệ điều hành sẽ đọc thông tin của partiton table trước tiên

– Hệ điều hành xem mỗi phân vùng là một ổ đĩa logic (logical disk)

– Có hai phương pháp quản lý phân vùng phổ biến: MBR (master boot record) và GPT (GUID partition table) (GUID: globally unique identifires)

MBR

Đọc tài liệu sau (từ trang 3 tới trang 18):

https://drive.google.com/file/d/0B4FOelgeetqJSkpuTlN0Rm12SmM/view?usp=sharing

Lab 3. Sử dụng Disk Management Tool để kiểm tra đĩa cứng được phân vùng theo MBR hay GPT?


Làm bài Lab 4. Khảo sát MBR bằng phần mềm Disk editor.

GPT


GPT là viết tắt của GUID Partition Table, là một chuẩn được sử dụng để phân vùng (chia) đĩa cứng (HDD hoặc SSD).

GPT sử dụng định danh duy nhất toàn cầu (GUID – Globally Unique Identifier). Đọc thêm về GUID tại đây: https://en.wikipedia.org/wiki/Universally_unique_identifier

GPT là một phần của chuẩn UEFI, mặc dù vậy, GPT vẫn hỗ trợ cho một số hệ thống máy tính chạy BIOS.

Trong khi, MBR sử dụng chuỗi 32 bit để đánh địa chỉ cho các khối nhớ, GPT sử dụng chuỗi 64 bit. Điều này cho phép GPT quản lý đĩa cứng có kích thước tối đa là 8ZiB (Zebibyte).


Xem hình cấu trúc của GPT:

GPT cũng sử dụng cách đánh địa chỉ theo LBA (logical block addressing).

– Protective MBR được đặt trong LBA0, vùng thông tin dùng để bảo vệ đĩa cứng khi người dùng sử dụng các phần mềm cũ (chỉ làm việc được với đĩa MBR) thao tác với đĩa GPT. Phần mềm cũ này cũng xem đĩa GPT là một đĩa cứng gồm một phân vùng duy nhất.

– GPT header đặt trong LBA1, trong GPT header có con trỏ trỏ tới bảng thông tin partition (partition table hay partition entry array), partition table thường nằm trong LBA2.

– Partition table có kích thước là 16.384 byte, gồm nhiều entry, mỗi entry có kích thước 128byte. Sector thứ 34 là sector đầu tiên có thể sử dụng để lưu dữ liệu.


– Hybrid MBR (LBA0 + GPT): dùng trong trường hợp hệ điều hành hỗ trợ boot từ BIOS vào đĩa GPT. Khi đó, MBR sẽ chứa một phần đoạn mã mồi khởi động (bootloader), đoạn mã này sẽ tìm và nhận diện ra đĩa GPT.

Cấu trúc của partiton table header (LBA1)[1]





Partition entries (LBA 2–33)

GUID partition entry format
Offset
Length
Contents
0 (0x00)
16 bytes
Partition type GUID (mixed endian) – giá trị của partition type
16 (0x10)
16 bytes
Unique partition GUID (mixed endian) – giá trị của unique partion
32 (0x20)
8 bytes
First LBA (little endian) – LBA đầu tiên của partition
40 (0x28)
8 bytes
Last LBA (inclusive, usually odd) – LBA cuối cùng của partition
48 (0x30)
8 bytes
Attribute flags (e.g. bit 60 denotes read-only) – cờ thuộc tính
56 (0x38)
72 bytes
Partition name (36 UTF-16LE code units) – tên của partition

Làm bài Lab 5. Khảo sát đĩa GPT.


3.2       Tập tin


Xem clip sau (tiếng Anh), từ phút thứ 10


Đọc trang 24 tới trang 45 tài liệu này: https://drive.google.com/file/d/1P_zsBstk_qvbf531CAV_-rV9GxSE7WwV/view

Theo wiki, tập tin (viết tắt cho tập thông tin; còn được gọi là tệp, tệp tin); tiếng Anh: file; là một tập hợp của thông tin được đặt tên. Thông thường thì các tập tin này chứa trong các thiết bị lưu trữ như đĩa cứng, đĩa mềm, CD, DVD cũng như là các loại chip điện tử dùng kĩ thuật flash có thể thấy trong các ổ nhớ có giao diện USB. Nói cách khác, tập tin là một dãy các bit có tên và được chứa trong các thiết bị lưu trữ dữ liệu kỹ thuật số.

Tập tin là đơn vị lưu trữ thông tin.

Tập tin thường gồm hai phần, phần nội dung của tập tin (file data) và vùng chứa thông tin mô tả tập tin (ví dụ: tên, ngày tạo, kích thước).

Ví dụ, phần thông tin mô tả cho tập tin trên giao diện Windows,



Ví dụ, phần thông tin mô tả cho tập tin trên đĩa cứng (hệ thống FAT32),



Cấu trúc mô tả cho tập tin (hệ thống FAT32),

Byte thứ
Mô tả
0-0
Kí tự đầu tiên của tên tập tin, hoặc trạng thái cấp phát (0xE5 hoặc 0x00: nếu chưa được cấp phát)
1-10
Kí tự thứ 2 đến 11 của tên tập tin
11-11
Byte thuộc tính (xem bảng về Byte thuộc tính)
12-12
Chưa sử dụng
13-13
Thời gian tạo tập tin (mili giây)
14-15
Thời gian tạo tập tin (giờ:phút:giây)
16-17
Ngày tạo tập tin
18-19
Thời gian truy cập mới nhất (gồm thao tác đọc/ ghi), nếu là ghi thì giá trị của trường này sẽ giống với trường WrtTime.
20-21
Phần byte cao (High word) của cluster bắt đầu.
22-23
Thời gian ghi tập tin mới nhất. Chú ý: tạo tập tin cũng được coi là ghi tập tin (giờ:phút:giây).
24-25
Ngày ghi tập tin mới nhất. Chú ý: tạo tập tin cũng được coi là ghi tập tin. Kí hiệu WrtTime.
26-27
Phần byte thấp (Low word) của cluster bắt đầu.
28-31
Kích thước của tập tin, đơn vị tính là byte. (nếu là thư mục, giá trị này là 0).

Dữ liệu trên đĩa,



Một tập tin luôn luôn kết thúc bằng một ký tự đặc biệt (hay dấu kết thúc) có mã ASCII là 255 ở hệ thập phân. Ký tự này thường được ký hiệu là EOF (viết tắt của End Of File).

Một tập tin có thể không chứa một thông tin nào ngoại trừ tên và dấu kết thúc. Tuy nhiên, điều này không hề mâu thuẫn với định nghĩa vì bản thân tên của tập tin cũng đã chứa thông tin. Những tập tin này gọi là tập tin rỗng hay tập tin trống.

Độ dài (kích thước) của tập tin có thể chỉ phụ thuộc vào khả năng của máy tính, khả năng của hệ điều hành cũng như vào phần mềm ứng dụng dùng nó. Đơn vị nhỏ nhất dùng để đo độ dài của tập tin là byte. Độ dài của tập tin không bao gồm độ dài của tên tập tin và dấu kết thúc.

Các thuộc tính của tập tin (ví dụ trên FAT): Archive, hidden, read-only, system, sub-directory.

Định dạng của tập tin: cấu trúc của một tập tin định nghĩa cách thức mà tập tin đó được chứa, được thực thi, và thể hiện trên các thiết bị (như màn hình hay máy in) gọi là định dạng của tập tin. Định dạng này có thể đơn giản hay phức tạp. Phần mở rộng cho biết định dạng của tập tin.

Tên tập tin: thường gồm tên và phần mở rộng. Phần mở rộng của tập tin có thể không bắt buộc phải có. Phần tên có thể phải tránh dùng một số kí tự đặc biệt, có độ dài tối đa tùy theo từng hệ điều hành.


3.3       Cấu trúc thư mục


Cần phân biệt thư mục (directory) và cấu trúc thư mục (directory structure). Thư mục làm một tập tin chứa thông tin mô tả cho thư mục con hoặc/và các tập tin trong thư mục đó.

Cấu trúc thư mục là cấu trúc dùng để quản lý tất cả các tập tin trên đĩa.

Đọc trang 26, 27, 28,


Một số kiến thức cần quan tâm:

– Thư mục một cấp, hai cấp và đa cấp

– Bảng thư mục (directory table)

– Các mục (directory entry) trong bảng thư mục

3.4       Cài đặt hệ thống quản lý tập tin


Một số kiến thức cần quan tâm:

– Cấp phát khối nhớ liên tục

– Cấp phát khối nhớ không liên tục (danh sách liên kết, bảng chỉ mục, bảng cấp phát, bảng I-nodes)

– Quản lý các khối trống


3.5       Khảo sát FAT32



3.6       Khảo sát NTFS (đọc thêm)




-------

Câu hỏi ôn tập

Câu hỏi 7. HDD và SSD là viết tắt của?

A. Hard Disk Driver và Soft State Drive
B. Hard Disk Driver và Solid State Driver
C. Hard Disk Drive và Solid State Drive
D. Hard Disc Drive và Solid State Drive

Câu hỏi 8. Cái nào dưới đây chứa được ít dữ liệu nhất?

A. Track
B. Platter
C. Cluster
D. Sector

Câu hỏi 9. Using MBR technique to patitioning, how many primary partition you can create?

A. 1
B. 3
C. 4
D. No limited

Câu hỏi 10. Using MBR technique to partitoning,  if OS was required installing on the primary partition, how many OS you can install on that disk?

A. 1
B. 2
C. 4
D. No limited

Câu hỏi 11. So sánh HDD và SSD?

Câu hỏi 12. Bạn biết gì về định dạng cấp thấp (low format)?

Câu hỏi 13. Trong đĩa cứng chia theo GPT, tại sao dữ liệu của người dùng thường được lưu tại sector thứ 34 trở đi?

Câu hỏi 14. Đĩa cứng MBR tạo được tối đa bao nhiêu ổ đĩa (giả sử dùng một chữ cái để đặt tên ổ đĩa)? giải thích?


Câu hỏi 15. Đĩa cứng GPT tạo được tối đa bao nhiêu ổ đĩa? giải thích?

Câu hỏi 16. Diễn giải cho các tình huống sau:


Firmware tại Mainboard
Phân vùng đĩa cứng
Ý nghĩa sử dụng trong thực tế (ví dụ: khả thi, không khả thi, tốt, không tốt, tối ưu, không tối ưu)
BIOS
MBR

BIOS
GPT

UEFI
MBR

UEFI
GPT

-------

Thực hành


Lab 3. Sử dụng Disk Management Tool để kiểm tra đĩa cứng được phân vùng theo MBR hay GPT?


How to Check Which Partition Table Your Disk Is Using

To check which partition table your disk is using, you have two options:  You can use Windows’ graphical Disk Management tool, or you can use the command line.

Option One: Use the Disk Management Tool

You can view this information in the Disk Management tool included with Windows. To access it, right-click the Start menu or press Windows Key+X and select “Disk Management.” You can also press Windows Key+R to open the Run dialog, type “diskmgmt.msc” into the box, and press Enter.
Locate the disk you want to check in the Disk Management window. Right-click it and select “Properties.”



Click over to the “Volumes” tab. To the right of “Partition style,” you’ll see either “Master Boot Record (MBR)” or “GUID Partition Table (GPT),” depending on which the disk is using.



Option Two: Use the Diskpart Command

You can also check using the standard diskpart command in a Command Prompt window. First, launch a Command Prompt window as Administrator by right-clicking the Start button or pressing Windows Key+X and selecting “Command Prompt (Admin).” You can also locate the Command Prompt shortcut in the Start menu, right-click it, and select “Run as Administrator.”

Type the following two commands, pressing Enter after each one:

diskpart

list disk

You’ll see a table listing your connected disks. If a disk is GPT, it will have an asterisk (that’s a * character) under the “Gpt” column. If it’s an MBR disk, it will be blank under the Gpt column.

For example, in the screenshot below, Disk 0 and Disk 1 are both GPT disks, while Disk 2 is an MBR disk.



Lab 4. Khảo sát MBR bằng phần mềm Disk editor.


Hướng dẫn đọc đĩa cứng bằng Disk editor: https://legiacong.blogspot.com/2012/10/oc-ia-cung-bang-phan-mem-disk-editor.html

Lab 5. Khảo sát GPT bằng phần mềm Active@ disk editor.

Sử dụng phần mềm Active@ disk editor, khảo sát đĩa cứng định dạng theo GPT, điền các thông tin vào bảng sau:

Offset
Length
Giá trị và giải thích
0 (0x00)
8 bytes

8 (0x08)
4 bytes

12 (0x0C)
4 bytes

16 (0x10)
4 bytes

20 (0x14)
4 bytes

24 (0x18)
8 bytes

32 (0x20)
8 bytes

40 (0x28)
8 bytes

48 (0x30)
8 bytes

56 (0x38)
16 bytes

72 (0x48)
8 bytes

80 (0x50)
4 bytes

84 (0x54)
4 bytes

88 (0x58)
4 bytes

92 (0x5C)
*


Khảo sát các partition hiện có trên đĩa cứng và điền các thông tin theo bảng sau:


Khảo sát Entry số:
Offset
Length
Nội dung và giải thích
0 (0x00)
16 bytes

16 (0x10)
16 bytes

32 (0x20)
8 bytes

40 (0x28)
8 bytes

48 (0x30)
8 bytes

56 (0x38)
72 bytes


Lab 7. Làm các bài tập sau:

-------
[1] https://thestarman.pcministry.com/asm/mbr/GPT.htm
--------
Cập nhật: 25/09/2019
-------
Bài tiếp theo: Hệ điều hành (3) - Quản lý tiến trình
Danh sách các bài học