1. Trang chủ
  2. » Giáo Dục - Đào Tạo

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

14 53 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 14
Dung lượng 286,5 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Team Monsters 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 Hoàng Mạnh Hiệp 20161438 Trần Thanh Tú 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.

Trang 1

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:

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

HÀ NỘI 12-2020

Trang 2

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

Trang 3

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 quý 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 hoàn thành tốt bài tập này

Trong quá trình hoàn thành bài tập, cũng như là trong quá 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

Trang 4

I Tiến trình

1 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ớ ngoà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 .) để hoà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ự hoà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:

Trang 5

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:

Trang 6

o 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

b 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

c Tạo tiến trình với CreateProcess

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

Trang 7

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

Trang 8

CREATE_NEW_CONSOLE Tạo cửa sổ console mới cho

tiến trình mới, thay vì thừa

kế console của tiến trình cha(default) Cờ này không được sử dụng với

DETACHED_PROCESS CREATE_NO_WINDOW Tiến trình là 1 ứng dụng

console, nhưng được chạy

mà không có console window Console handle cho ứng udngj không đươc set

Cờ này đươc bỏ qua nếu ứng dụng không phải là ứng dụng console

CREATE_NEW_PROCESS_GROUP Tiến trình mới là tiến trình

root của 1 nhóm tiến trình mới group tiến trình bao gồm tất cả các tiến trình là

“hậu duệ” của tiến trình root ProcessID của nhóm tiến trình mới cũng giống với PID, đươc trả về trong IpProcessInformation

Goup tiến trình được sử dụng bới

GenerateConsoleCtrlEvent

để enable gửi 1 tín hiệu CTRL+C sẽ được disable tới tất cả các process trong nhóm tiến trình mới

Cờ này bị bỏ qua nếu sử dụng

CREATE_NEW_CONSOLE CREATE_SUSPENDED Primary thread của tiến trình

mới được tạo trong trạng thái suspend Và không chạy cho đến khi Resume Thread đươc gọi

Trang 9

Danh sách các giá trị GetPriorityClass

Priority Class Flag Identifier

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ể yê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 hoàn thành câu lệnh cuối và yê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:

Trang 10

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

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 <process_id> /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:

Trang 11

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:

o hProcess: process cần set độ ưu tiên được lấy ra từ OpenProcess

o dwPriorityClass: độ ưu tiên bao gôm các tham số như sau:

ABOVE_NORMAL_PRIORITY_CLASS, BELOW_NORMAL_PRIORITY_CLASS, HIGH_PRIORITY_CLASS, IDLE_PRIORITY_CLASS,

NORMAL_PRIORITY_CLASS, REALTIME_PRIORITY_CLASS,

Trang 12

II Luồng

1 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 toà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,

Trang 13

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

Trang 14

Tài liệu tham khảo

1 Slide hệ điều hành – TS Phạm Đăng Hải

2 Web:

https://docs.microsoft.com/enus/windows/win32/api/proce ssthreadsapi/

Ngày đăng: 10/06/2022, 19:22

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w