Tải bản đầy đủ (.docx) (14 trang)

(TIỂU LUẬN) báo cáo môn học lập trình hệ thống tên đề tài tìm hiểu về quản lí tiến trình trên hệ điều hành windows

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (297.78 KB, 14 trang )

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG
NGHỆ THÔNG TIN VÀ TRUYỀN THƠNG ──────── *
───────

BÁO CÁO MƠN HỌC

Lập trình hệ thống
Tên đề tài: Tìm hiểu về quản lí tiến trình trên
hệ điều hành windows
Sinh viên thực hiện:
Hồng Mạnh Hiệp
Trần Thanh Tú

20161438
20164487

Giảng viên hướng dẫn: ĐỖ QUỐC HUY

HÀ NỘI 12-2020


MỤC LỤC
Contents
Lời mở đầu.............................................................................................. 3
I.
Tiến trình........................................................................................ 4
1. Khái niệm......................................................................................4
2. Trạng thái tiến trình.................................................................... 4
3. Tạo tiến trình................................................................................5
a.
Lý thuyết........................................................................... 5


b.
Liệt kê tất cả process trong windows:................................ 6
c.
Tạo tiến trình với CreateProcess........................................ 6
4. Kết thúc tiến trình........................................................................9
5. Độ ưu tiên trong tiến trình........................................................ 10
II. Luồng............................................................................................ 12
1. Khái niệm................................................................................... 12
2. Tạo luồng với hàm CreateThread ()............................................ 12
Tài liệu tham khảo................................................................................14

2


Lời mở đầu
Trên thực tế khơng có sự thành cơng nào mà không gắn liền với những sự hỗ
trợ, giúp đỡ dù ít hay nhiều, dù trực tiếp hay gián tiếp của người khác. Trong suốt
thời gian từ khi bắt đầu học tập ở giảng đường đại học đến nay, em đã nhận được
rất nhiều sự quan tâm, giúp đỡ của q thầy cơ, gia đình và bạn bè. Với lòng biết
ơn sâu sắc nhất, em xin gửi lời cảm ơn đến thầy Trịnh Anh Phúc, Giảng viên
Khoa Công nghệ Thông tin Trường Đại học Bách Khoa Hà Nội đã giúp đỡ nhóm
em hồn thành tốt bài tập này.
Trong q trình hồn thành bài tập, cũng như là trong q trình làm bài báo
cáo khó tránh khỏi sai sót, rất mong các thầy, cơ bỏ qua. Đồng thời do trình độ lý
luận cũng như kinh nghiệm thực tiễn còn hạn chế nên bài báo cáo không thể
tránh khỏi những thiếu sót, em rất mong nhận được ý kiến đóng góp thầy để em
học thêm được nhiều kinh nghiệm và sẽ hoàn thành tốt hơn bài báo cáo những
lần sau.

Hà Nội, tháng 12 - 2020

3


I.
1.

Tiến trình
Khái niệm
Chương trình – Program:
một file chạy được chứa các chỉ lệnh (instruction) được viết để thực thi
một công việc nào đó trên máy tính có thể thực thi được
Nằm ở bộ nhớ ngồi của máy tính
Tiến trình:
Là chương trình đang thực hiện, được cung cấp tài nguyên (CPU,
bộ nhớ, thiết bị vào/ra. . .) để hồn thành cơng việc.
Tài nguyên được cấp khi khởi tạo tiến trình hay khi tiến trình đang
thực hiện.
Mỗi tiến trình có một số định danh (process ID, hay pid), là một số
dương để xác định tiến trình đó là duy nhất trong hệ thống. Lập
trình viên có thể tác động lên tiến trình (ví dụ kill tiến trình) bằng
một số system call với đối số truyền vào là process ID đó. Có thể
lấy process ID của tiến trình đang chạy bằng system call getpid ()
với prototype như sau:

2.

Trạng thái tiến trình
Tiến trình bao gồm các trạng thái và khi thực hiện thì tiến trình thay sẽ đổi
trạng thái. Việc thay đổi trạng thái chính là một phần trong hoạt động hiện
tại của tiến trình. Các trạng thái của tiến trình bao gồm

Khởi tạo (New) Tiến trình đang được khởi tạo
Sẵn sàng (Ready) Tiến trình đang đợi sử dụng processor vật lý.
Thực hiện (Running) Các câu lệnh của tiến trình đang được thực
hiện.
Chờ đợi (Waiting) Tiến trình đang chờ đợi một sự kiện nào đó xuất
hiện (sự hồn thành thao tác vào/ra).
Kết thúc (Terminated) Tiến trình thực hiện xong.
Lưu đồ thay đổi trạng thái tiến trình:

4


Tiến trình gồm:
Tiến trình đơn luồng: Là một chương trình thực hiện chỉ một luồng
thực thi.
o Có một luồng câu lệnh thực thi.
o Cho phép thực hiện chỉ một nhiệm vụ tại một thời điểm.
Tiến trình đa luồng: Có nhiều luồng thực thi.
o Cho phép thực hiện nhiều hơn một nhiệm vụ tại một thời
điểm
3.

Tạo tiến trình
a. Lý thuyết
Các tiến trình có thể tạo ra các tiến trình khác thơng qua lời gọi hệ thống
Ví dụ: system(“notepad.exe”)
Tiến trình gọi (calling process) là tiến trình cha (parent process), tiến trình mới được được tạo là tiến
trình con của⇒tiến trình đó. Tiến trình con có thể tạo tiến trình con khác Cây tiến trình

Có 2 tùy chọn cho tiến trình cha sau khi tạo ra tiến trình mới:

(1) Tiến trình cha tiếp tục thực thi, đồng thời với việc thực thi của tiến
trình con.
(2) Tiến trình cha đợi cho tới khi tiến trình con của nó kết thúc
Việc tạo tiến trình gặp một số vấn đề như sau:
Vấn đề phân phối tài nguyên:
Tiến trình con lấy tài nguyên từ hệ điều hành
Tiến trình con lấy tài nguyên từ tiến trình cha và có thể lấy:

5


Tất cả các tài nguyên
o Một phần tài nguyên của tiến trình cha (ngăn ngừa việc tạo
quá nhiều tiến trình con)
Vấn đề thực hiện:
Tiến trình cha tiếp tục thực hiện đồng thời với tiến trình con
Tiến trình cha đợi tiến trình con kết thúc
Liệt kê tất cả process trong windows:
Để liệt kê các process đang chạy trong window ta có thể sử dụng các
cách như sau:
Sử dụng lệnh tasklist trong command prompt
Sử dụng hàm CreateToolhelp32Snapshot mà Microsoft cung cấp
hàm này có 2 tham số:
o dwFlags: sử dụng TH32CS_SNAPPROCESS: bao gơm tất
cả tiến trình trong hệ thống
o th32ProcessID: 0 process hiện tại
Hàm Process32First, Process32Next: Thơng tin tiến trình đầu tiên
process
o hSnapshot: kq trả về từ hàm CreateToolhelp32Snapshot:
o lppe: con trỏ PROCESSENTRY32

Mục đích chính của các hàm này là lấy ra tất cả process đang chạy
qua hàm CreateToolhelp32Snapshot sau đó lặp dần để lấy tưng
process với hàm Process32Next
Tạo tiến trình với CreateProcess
o

b.

c.

Khởi tạo 1 tiến trình mới và 1 primary thread của nó.
Tiến trình được tạo là tiến trình con, tiến trình gọi là tiến trình cha.
BOOL CreateProcess (
LPCWSTR
lpApplicationName,
LPWSTR
lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL
bInheritHandles,
DWORD
dwCreationFlags,
LPVOID
lpEnvironment,
LPCWSTR
lpCurrentDirectory,
LPSTARTUPINFOW
lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation


6


);

Giá trị trả về của hàm:
True: Hàm success
False: Hàm
fail Tham số:
lpApplicationName: Tên của module được thực thi. Tham số này
hay được để NULL, thay vào đó sử dụng lpCommandLine để chỉ thị
process nào được thực thi.
lpCommandLine: Dòng lện được thực thi
o Sử dụng đường dẫn tương tự như trong command line để
cho biết process nào sẽ được thực thi.
o Nếu tên file thực thi khơng có phần mở rộng, .EXE sẽ được
gán.
o Nếu tên file thực thi không chứa đường dẫn thư mục, hệ thống
search file thực thi theo tuần tự sau:
1. Trong thư mục ứng dụng được load
2. Thư mục hiện tại cho tiến trình cha
3. Trong thư mục System/System32
4. Trong thư mục Windows
5. Trong các thư mục đươc list trong biến môi trường
PATH
lpProcessAttributes: Con trỏ tới cấu trúc
SECURITY_ATTRIBUTES, quyết định xem handle trả về cho
thread object mới có thể được kế thừa bởi các tiến trình con. Nếu
lpProcessAttributes là NULL, handle không thể được kế thừa.

bInheritHandles:
o Nếu tham số này là TRUE, mỗi handle có thể kế thừa trong
calling process được kế thừa trong tiến trình mới.
o Nếu tham số này là FALSE, các handle không được kế thừa
o Chú ý rằng, các handle có cùng giá trị và quền truy cập
như handle ban đầu.
dwCreationFlags: Cờ cho phép chỉ định độ ưu tiên (priority class)
của tiến trình và tạo tiến trình theo cách thực nào.
Danh sách các giá trị Process Creation Flags
Constant/value
Description

7
CREATE_NEW_CONSOLE


CREATE_NO_WINDOW

CREATE_NEW_PROCESS_GROUP

CREATE_SUSPENDED

8
Priority Class
Idle


Below normal
Normal
Above normal

High
Realtime
Giá trị mặc định là NORMAL_PRIORITY_CLASS
lpEnvironment: Một con trỏ tới block environment của tiến
trình mới. Nếu là NULL, tiến trình mới sử dụng environment
của tiến trình gọi.
lpCurrentDirectory: Đường dẫn đẩy đủ tới thư mục cho tiến
trình o Nếu tham số này là NULL, tiến trình con sẽ có
current drive
và thư mục giống với tiến trình gọi.
lpStartupInfo: Một con trỏ tới STARTUPINFO struct
lpProcessInformation: Một con trỏ tới
PROCESS_INFORMATION structure để nhận thơng tin xác định
cho tiến trình mới.
o Handle trong PROCESS_INFORMATION struct phải
được đóng với CloseHandle khi khơng cịn cần thiết.

4.

Kết thúc tiến trình
Các tiến trình có thể u cầu kết thúc chính nó bằng cách gọi hàm
exit().
Khi kết thúc tiến trình, tất cả resource của hệ thống được giải
phóng, các file được flush và đóng…
Tiến trình kết thúc khi hồn thành câu lệnh cuối và u cầu HĐH
xóa nó (exit) khi đó tiến trình sẽ:
o Gửi trả dữ liệu tới tiến trình cha
o Các tài nguyên đã cung cấp được trả lại hệ thống
Tiến trình cha có thể kết thúc sự thực hiện của tiến trình con:


9


o
o

Tiến trình cha phải biết định danh tiến trình con(PID) ⇒ tiến
trình con phải gửi định danh cho tiến trình cha khi được khởi
tạo.
Sử dụng lời gọi hệ thống (abort): Tiến trình cha kết thúc tiến trình con khi tiến
trình con sử dụng vượt quá mức tài nguyên được cấp. Nhiệm vụ cung cấp cho
tiến trình con khơng cịn cần thiết nữa và khi tiến trình cha kết thúc và hệ điều
hành khơng ⇒cho phép tiến trình con tồn tại khi tiến trình cha kết thúc

Cascading termination.
o VD: khi kết thúc hệ thống
Trong windows để kết thúc một tiến trình có thể sử dụng các cách sau:
o Sử dụng hàm gọi system theo cú pháp sau:
System (“taskkill /PID /F”)
o Sử dụng hàm TerminateProcess (HANDLE hProcess, UINT
uExitCode) trong đó:
hProcess: Thẻ tiến trình bị kết thúc đóng
uExitCode: Mã kết thúc tiến trình
Khi hàm này được thực hiện thì nó sẽ kết thúc một tiến trình
chỉ định và tất cả các luồng của nó.
5. Độ ưu tiên trong tiến trình
Hệ điều hành windows chia sẻ tài nguyên xử lí cho các process đang
chạy dựa trên độ ưu tiên của nó. Với một process có độ ưu tiên cao thì
sẽ nhận được nhiều tài nguyên hơn và ngược lại.
Có thể chỉ định mức độ ưu tiên cho một tiến trình, với các mức độ ưu

tiên như sau: Realtime, High, Above normal, Normal, Below normal,
Low
Để thay đổi độ ưu tiên của một process có thể thực hiện theo các
cách sau:
o Thao tác trực tiếp trên task manager:

10


o

Sử dụng command line:

o

Sử dụng hàm SetPriorityClass trong C:
Hàm này bao gồm 2 tham số đầu vào:
hProcess: process cần set độ ưu tiên được lấy ra từ OpenProcess
dwPriorityClass: độ ưu tiên bao gôm các tham số như sau:

o
o

ABOVE_NORMAL_PRIORITY_CLASS,
BELOW_NORMAL_PRIORITY_CLASS,
HIGH_PRIORITY_CLASS, IDLE_PRIORITY_CLASS,
NORMAL_PRIORITY_CLASS, REALTIME_PRIORITY_CLASS,

11



AI.
1.

Luồng
Khái niệm
• Là đơn vị sử dụng CPU cơ bản, gồm:
o Định danh luồng (ID Thread)
o Bộ đếm chương trình (Program Computer)
o Tập các thanh ghi (Rigisters)
o Khơng gian stack
• Trong mơ hình đơn luồng, một tiến trình là một luồng
• Trong mơ hình đa luồng, một tiến trình có thể có nhiều luồng, gọi là
multithreaded process. Các luồng chia sẻ bộ nhớ ảo của tiến trình.
Luồng mức người dùng (User threads)
Được cài đặt bởi thư viện luồng tại mức người dùng
o Thư viện hỗ trợ tạo, điều phối, quản lý luồng
Thao tác luồng được thực hiện trong không gian người dung (nhân
khơng biết gì về luồng người dùng nên khơng can thiệp)
o Tạo và quản lý⇒luồng nhanh chóng

Nếu nhân đơn luồng Một luồng đang chờ đợi vào ra có thể làm
cho tồn bộ tiến trình phải đợi theo
Luồng mức hệ thống (Kernel threads)
Được hỗ trợ trực tiếp bởi HĐH
o Nhân thực hiện tạo, lập lịch, quản lý luồng trong không
gian nhân.
Hệ điều hành quản lý luồng:
o Chậm trong tạo và quản lý luồng.
o Một luồng chờ đợi vào ra, không ảnh hưởng tới luồng

khác. Trong môi trường đa VXL, nhân có thể điều phối các luồng
cho các VXL khác nhau.
2. Tạo luồng với hàm CreateThread () HANDLE
CreateThread ( LPSECURITY_ATTRIBUTES
lpThreadAttributes, SIZE_T dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
__drv_aliasesMem LPVOID lpParameter, DWORD
dwCreationFlags,

12


LPDWORD lpThreadId);
Trong đó:
LPSECURITY_ATTRIBUTES lpThreadAttributes
o Trỏ tới cấu trúc an ninh: thẻ trả về có thể được kế
thừa?
DWORD dwStackSize
o Kích thước ban đầu của stack cho luồng mới
LPTHREAD_START_ROUTINE lpStartAddress
o Trỏ tới hàm được thực hiện bởi luồng mới
LPVOID lpParameter
o Trỏ tới các biến được gửi tới luồng mới (tham số của
hàm)
DWORD dwCreationFlags
o Phương pháp tạo luồng
CREATE_SUSPENDED : Luồng ở trạng thái tạm ngừng
o 0: Luồng được thực hiện ngay lập tức
LPDWORD lpThreadId
o Biến ghi nhận định danh luồng mới

Kết quả trả về: Thẻ của luồng mới hoặc giá trị NULL nếu
không tạo được luồng mới.

1
3


Tài liệu tham khảo
1.
2.

Slide hệ điều hành – TS. Phạm Đăng Hải
Web:
/>ssthreadsapi/

14



×