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.
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 quản lí tiến trình hệ điều hành windows Sinh viên thực hiện: Hoà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 I Tiến trình Khái niệm Trạng thái tiến trình Tạo tiến trình a Lý thuyết b Liệt kê tất process windows: .6 c Tạo tiến trình với CreateProcess .6 Kết thúc tiến trình .9 Độ ưu tiên tiến trình 10 II Luồng 12 Khái niệm 12 Tạo luồng với hàm CreateThread () 12 Tài liệu tham khảo 14 Lời mở đầu Trên thực tế khơng có thành cơng mà không gắn liền với hỗ trợ, giúp đỡ dù hay nhiều, dù trực tiếp hay gián tiếp người khác Trong suốt thời gian từ bắt đầu học tập giảng đường đại học đến nay, em nhận nhiều quan tâm, giúp đỡ q thầy cơ, gia đình 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 tập Trong q trình hồn thành tập, trình làm báo cáo khó tránh khỏi sai sót, mong thầy, bỏ qua Đồng thời trình độ lý luận kinh nghiệm thực tiễn hạn chế nên báo cáo khơng thể tránh khỏi thiếu sót, em mong nhận ý kiến đóng góp thầy để em học thêm nhiều kinh nghiệm hoàn thành tốt báo cáo lần sau Hà Nội, tháng 12 - 2020 I Tiến trình Khái niệm Chương trình – Program: file chạy chứa lệnh (instruction) viết để thực thi cơng việc máy tính thực thi Nằm nhớ máy tính Tiến trình: Là chương trình thực hiện, cung cấp tài nguyên (CPU, nhớ, thiết bị vào/ra .) để hồn thành cơng việc Tài nguyên cấp khởi tạo tiến trình hay tiến trình thực Mỗi tiến trình có số định danh (process ID, hay pid), số dương để xác định tiến trình hệ thống Lập trình viên tác động lên tiến trình (ví dụ kill tiến trình) số system call với đối số truyền vào process ID Có thể lấy process ID tiến trình chạy system call getpid () với prototype sau: Trạng thái tiến trình Tiến trình bao gồm trạng thái thực tiến trình thay đổi trạng thái Việc thay đổi trạng thái phần hoạt động tiến trình Các trạng thái tiến trình bao gồm Khởi tạo (New) Tiến trình khởi tạo Sẵn sàng (Ready) Tiến trình đợi sử dụng processor vật lý Thực (Running) Các câu lệnh tiến trình thực Chờ đợi (Waiting) Tiến trình chờ đợi kiện xuất (sự hồn thành thao tác vào/ra) Kết thúc (Terminated) Tiến trình thực xong Lưu đồ thay đổi trạng thái tiến trình: Tiến trình gồm: Tiến trình đơn luồng: Là chương trình thực luồng thực thi o Có luồng câu lệnh thực thi o Cho phép thực nhiệm vụ 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 nhiều nhiệm vụ thời điểm Tạo tiến trình a Lý thuyết Các tiến trình tạo 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) tiến trình cha (parent process), tiến trình được tạo tiến trình tiến trình Tiến trình tạo tiến trình khác ⇒Cây tiến trình Có tùy chọn cho tiến trình cha sau tạo 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 tiến trình (2) Tiến trình cha đợi tiến trình kết thúc Việc tạo tiến trình gặp số vấn đề sau: Vấn đề phân phối tài nguyên: Tiến trình lấy tài nguyên từ hệ điều hành Tiến trình lấy tài ngun từ tiến trình cha lấy: o Tất tài nguyên o Một phần tài nguyên tiến trình cha (ngăn ngừa việc tạo nhiều tiến trình con) Vấn đề thực hiện: Tiến trình cha tiếp tục thực đồng thời với tiến trình Tiến trình cha đợi tiến trình kết thúc b Liệt kê tất process windows: Để liệt kê process chạy window ta sử dụng cách sau: Sử dụng lệnh tasklist command prompt Sử dụng hàm CreateToolhelp32Snapshot mà Microsoft cung cấp hàm có tham số: o dwFlags: sử dụng TH32CS_SNAPPROCESS: bao gôm tất tiến trình hệ thống o th32ProcessID: process Hàm Process32First, Process32Next: Thông tin tiến trình process o hSnapshot: kq trả từ hàm CreateToolhelp32Snapshot: o lppe: trỏ PROCESSENTRY32 Mục đích hàm lấy tất process 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 tiến trình primary thread Tiến trình tạo tiến trình con, tiến trình gọi 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 ); Giá trị trả hàm: True: Hàm success False: Hàm fail Tham số: lpApplicationName: Tên module thực thi Tham số hay để NULL, thay vào sử dụng lpCommandLine để thị process thực thi lpCommandLine: Dòng lện thực thi o Sử dụng đường dẫn tương tự command line biết process thực thi o Nếu tên file thực thi khơng có phần mở rộng, EXE 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 sau: Trong thư mục ứng dụng load Thư mục cho tiến trình cha Trong thư mục System/System32 Trong thư mục Windows Trong thư mục đươc list biến môi trường PATH lpProcessAttributes: Con trỏ tới cấu trúc SECURITY_ATTRIBUTES, định xem handle trả cho thread object kế thừa tiến trình Nếu lpProcessAttributes NULL, handle kế thừa bInheritHandles: o Nếu tham số TRUE, handle kế thừa calling process kế thừa tiến trình o Nếu tham số FALSE, handle không kế thừa o Chú ý rằng, handle có giá trị quền truy cập handle ban đầu dwCreationFlags: Cờ cho phép định độ ưu tiên (priority class) tiến trình tạo tiến trình theo cách thực Danh sách giá trị Process Creation Flags Constant/value Description CREATE_NEW_CONSOLE Tạo cửa sổ console cho tiến trình mới, thay thừa kế console tiến trình cha(default) Cờ không sử dụng với DETACHED_PROCESS CREATE_NO_WINDOW Tiến trình ứng dụng console, chạy mà khơng có console window Console handle cho ứng udngj khơng đươc set Cờ đươc bỏ qua ứng dụng khơng phải ứng dụng console CREATE_NEW_PROCESS_GROUP Tiến trình tiến trình root nhóm tiến trình group tiến trình bao gồm tất tiến trình “hậu duệ” tiến trình root ProcessID nhóm tiến trình giống với PID, đươc trả IpProcessInformation Goup tiến trình sử dụng bới GenerateConsoleCtrlEvent để enable gửi tín hiệu CTRL+C disable tới tất process nhóm tiến trình Cờ bị bỏ qua sử dụng CREATE_NEW_CONSOLE CREATE_SUSPENDED Primary thread tiến trình tạo trạng thái suspend Và không chạy Resume Thread đươc gọi Danh sách giá trị GetPriorityClass Priority Class Flag Identifier Idle IDLE_PRIORITY_CLASS Below normal BELOW_NORMAL_PRIORITY_CLASS Normal NORMAL_PRIORITY_CLASS Above normal ABOVE_NORMAL_PRIORITY_CLASS High HIGH_PRIORITY_CLASS Realtime REALTIME_PRIORITY_CLASS Giá trị mặc định NORMAL_PRIORITY_CLASS lpEnvironment: Một trỏ tới block environment tiến trình Nếu NULL, tiến trình sử dụng environment 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ố NULL, tiến trình có current drive thư mục giống với tiến trình gọi lpStartupInfo: Một trỏ tới STARTUPINFO struct lpProcessInformation: Một trỏ tới PROCESS_INFORMATION structure để nhận thơng tin xác định cho tiến trình o Handle PROCESS_INFORMATION struct phải đóng với CloseHandle khơng cịn cần thiết Kết thúc tiến trình Các tiến trình u cầu kết thúc cách gọi hàm exit() Khi kết thúc tiến trình, tất resource hệ thống giải phóng, file flush đóng… Tiến trình kết thúc hoàn thành câu lệnh cuối yêu cầu HĐH xóa (exit) tiến trình sẽ: o Gửi trả liệu tới tiến trình cha o Các tài nguyên cung cấp trả lại hệ thống Tiến trình cha kết thúc thực tiến trình con: o Tiến trình cha phải biết định danh tiến trình con(PID) ⇒ tiến trình phải gửi định danh cho tiến trình cha 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 tiến trình sử dụng vượt mức tài nguyên cấp Nhiệm vụ cung cấp cho tiến trình khơng cịn cần thiết tiến trình cha kết thúc hệ điều hành khơng cho phép tiến trình tồn tiến trình cha kết thúc ⇒Cascading termination o VD: kết thúc hệ thống Trong windows để kết thúc tiến trình sử dụng 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) đó: 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 thực kết thúc tiến trình định tất luồng Độ ưu tiên tiến trình Hệ điều hành windows chia sẻ tài nguyên xử lí cho process chạy dựa độ ưu tiên Với process có độ ưu tiên cao nhận nhiều tài nguyên ngược lại Có thể định mức độ ưu tiên cho tiến trình, với mức độ ưu tiên sau: Realtime, High, Above normal, Normal, Below normal, Low Để thay đổi độ ưu tiên process thực theo cách sau: o Thao tác trực tiếp task manager: 10 o Sử dụng command line: o Sử dụng hàm SetPriorityClass C: Hàm bao gồm tham số đầu vào: o hProcess: process cần set độ ưu tiên lấy từ OpenProcess o dwPriorityClass: độ ưu tiên bao gôm tham số sau: ABOVE_NORMAL_PRIORITY_CLASS, BELOW_NORMAL_PRIORITY_CLASS, HIGH_PRIORITY_CLASS, IDLE_PRIORITY_CLASS, NORMAL_PRIORITY_CLASS, REALTIME_PRIORITY_CLASS, 11 II Luồng Khái niệm • Là đơn vị sử dụng CPU bản, gồm: o Định danh luồng (ID Thread) o Bộ đếm chương trình (Program Computer) o Tập ghi (Rigisters) o Khơng gian stack • Trong mơ hình đơn luồng, tiến trình luồng • Trong mơ hình đa luồng, tiến trình có nhiều luồng, gọi multithreaded process Các luồng chia sẻ nhớ ảo tiến trình Luồng mức người dùng (User threads) Được cài đặt thư viện luồng 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 thực khơng gian người dung (nhân khơng biết luồng người dùng nên không can thiệp) o Tạo quản lý luồng nhanh chóng Nếu nhân đơn luồng ⇒Một luồng chờ đợi vào làm cho tồn tiến trình phải đợi theo Luồng mức hệ thống (Kernel threads) Được hỗ trợ trực tiếp HĐH o Nhân thực tạo, lập lịch, quản lý luồng không gian nhân Hệ điều hành quản lý luồng: o Chậm tạo 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 điều phối luồng cho VXL khác 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ả kế thừa? DWORD dwStackSize o Kích thước ban đầu stack cho luồng LPTHREAD_START_ROUTINE lpStartAddress o Trỏ tới hàm thực luồng LPVOID lpParameter o Trỏ tới biến gửi tới luồng (tham số 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 thực LPDWORD lpThreadId o Biến ghi nhận định danh luồng Kết trả về: Thẻ luồng giá trị NULL không tạo luồng 13 Tài liệu tham khảo Slide hệ điều hành – TS Phạm Đăng Hải Web: https://docs.microsoft.com/enus/windows/win32/api/proce ssthreadsapi/ 14 ... thi tiến trình (2) Tiến trình cha đợi tiến trình kết thúc Việc tạo tiến trình gặp số vấn đề sau: Vấn đề phân phối tài nguyên: Tiến trình lấy tài nguyên từ hệ điều hành Tiến trình lấy tài nguyên... tiến trình tiến trình Tiến trình tạo tiến trình khác ⇒Cây tiến trình Có tùy chọn cho tiến trình cha sau tạo 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 tiến. .. (exit) tiến trình sẽ: o Gửi trả liệu tới tiến trình cha o Các tài nguyên cung cấp trả lại hệ thống Tiến trình cha kết thúc thực tiến trình con: o Tiến trình cha phải biết định danh tiến trình