Font size
WorksheetsHệ điều hành: Tiến trình và định thời (trích đề)
Total questions: 120
Worksheet time: 3600secs
Tiến trình (process) là gì?
Là chương trình đang được biên dịch
Là chương trình lưu trên đĩa
Là chương trình đang bị tạm ngưng
Là chương trình đang thực thi
Chương trình là thực thể bị động, còn tiến trình là thực thể ________.
bị động
chủ động
phụ thuộc
không xác định
Khi một tập tin thực thi được nạp vào bộ nhớ, nó trở thành gì?
Chương trình
Tiến trình
Tập tin dữ liệu
Thư viện động
Phần nào của tiến trình chứa mã lệnh chương trình?
Text section
Data section
Stack
Heap
Phần nào của tiến trình chứa biến toàn cục (global variables)?
Text section
Data section
Heap
Stack
Phần nào chứa biến cục bộ và tham số hàm của tiến trình?
Data section
Heap
Stack
Text
Trạng thái “new” của tiến trình có nghĩa là:
Tiến trình vừa được tạo
Tiến trình đang chạy
Tiến trình đang đợi I/O
Tiến trình đã kết thúc
Trạng thái “ready” của tiến trình là khi:
Chưa được cấp phát tài nguyên
Đã có đủ tài nguyên, chỉ còn chờ CPU
Đang đợi I/O
Đã bị hủy
Trạng thái “running” nghĩa là:
Các lệnh đang được CPU thực thi
Tiến trình đang đợi nhập/xuất
Tiến trình đã hoàn thành
Tiến trình vừa được tạo
Trạng thái “waiting” còn được gọi là gì?
Blocked
Ready
Running
Terminated
Trạng thái “terminated” của tiến trình là khi:
Tiến trình đã kết thúc thực thi
Tiến trình đang đợi CPU
Tiến trình bị treo
Tiến trình đang tạo tiến trình con
Thông tin nào không nằm trong PCB?
Trạng thái tiến trình
Thanh ghi và bộ đếm chương trình
Thông tin quản lý bộ nhớ
Danh sách các file hệ thống toàn cục
PCB (Process Control Block) dùng để:
Lưu trữ thông tin cần thiết để quản lý tiến trình
Lưu mã lệnh chương trình
Tăng tốc CPU
Cấp phát bộ nhớ cho tiến trình
Ai chịu trách nhiệm chuyển đổi CPU từ tiến trình này sang tiến trình khác?
Hệ điều hành
Trình biên dịch
Bộ nhớ chính
Người dùng
Quá trình CPU chuyển từ tiến trình này sang tiến trình khác gọi là:
Chuyển ngữ cảnh (context switch)
Chuyển đổi tiến trình
Chuyển đổi bộ nhớ
Chuyển đổi I/O
Bộ định thời dài (long-term scheduler) còn được gọi là gì?
Bộ định thời công việc (Job scheduler)
Bộ định thời CPU
Bộ định thời trung gian
Bộ định thời ưu tiên
Bộ định thời ngắn (short-term scheduler) còn được gọi là gì?
Job scheduler
CPU scheduler
Medium-term scheduler
IO scheduler
Mục tiêu chính của định thời tiến trình là:
Tận dụng tối đa CPU và giảm thời gian đáp ứng
Giảm số tiến trình
Giảm dung lượng bộ nhớ
Tăng số tiến trình lỗi
Trong mô hình cộng tác giữa các tiến trình, mục tiêu không phải là:
Chia sẻ dữ liệu
Tăng tốc tính toán
Giảm tốc độ xử lý
Thực hiện công việc chung
IPC (Inter-Process Communication) có hai mô hình chính là:
Shared memory và Message passing
Client-server và Peer-to-peer
Shared file và Remote call
Blocking và Non-blocking
Trong hệ thống đa chương, định thời tiến trình nhằm:
Quản lý việc chia sẻ CPU giữa nhiều tiến trình
Quản lý việc cấp phát bộ nhớ
Khi tiến trình đang chạy bị ngắt bởi I/O, nó sẽ chuyển sang trạng thái:
Waiting (Blocked)
Ready
Terminated
New
Khi tiến trình đang đợi I/O xong, hệ điều hành sẽ chuyển nó sang trạng thái:
Ready
Running
New
Terminated
Thông tin lập thời biểu CPU trong PCB bao gồm:
Danh sách tiến trình con
Độ ưu tiên, thời gian sử dụng CPU
Mã lệnh chương trình
Bộ đệm I/O
Hệ điều hành cần quản lý tiến trình nhằm:
Đảm bảo hiệu suất CPU và tránh deadlock
Tăng tốc truy xuất đĩa
Tăng dung lượng bộ nhớ
Giảm số lượng tiến trình
Trong hệ thống, các tiến trình được lưu trữ ở đâu để định thời?
Các hàng đợi tiến trình (queues)
Các thanh ghi CPU
Vùng heap
Bộ nhớ đệm
Hàng đợi “Ready Queue” chứa các tiến trình:
Đã sẵn sàng để chạy nhưng chưa được CPU cấp phát
Đang đợi I/O
Đang kết thúc
Chưa được tạo
“Job Queue” là hàng đợi chứa:
Các tiến trình đang trong hệ thống chờ cấp CPU
Các tiến trình bị lỗi
Các tiến trình đã hoàn tất
Các tiến trình đang đợi nhập xuất
Context switch xảy ra khi:
CPU chuyển quyền điều khiển từ tiến trình này sang tiến trình khác
Hệ điều hành tạo tiến trình mới
Người dùng đăng nhập
Bộ nhớ bị tràn
Bộ định thời trung gian (medium-term scheduler) có nhiệm vụ chính là:
Điều chỉnh mức độ đa chương bằng cách swap tiến trình ra/vào bộ nhớ
Chia sẻ CPU
Quản lý ổ đĩa
Phân chia vùng nhớ
System call nào trong Unix dùng để tạo tiến trình mới?
fork()
exec()
exit()
wait()
Trong Unix, lệnh exec() có nhiệm vụ:
Nạp chương trình mới vào vùng nhớ tiến trình hiện tại
Tạo tiến trình mới
Kết thúc tiến trình
Tạm dừng tiến trình
Khi tiến trình cha và con thực thi đồng thời, ta gọi là:
Concurrent execution
Parallel execution
Sequential execution
Time delay
Một tiến trình con có thể chia sẻ tài nguyên của tiến trình cha bằng cách:
Thừa hưởng toàn bộ hoặc một phần tài nguyên
Sao chép độc lập toàn bộ tài nguyên
Không thể chia sẻ
Chỉ chia sẻ code
Khi tiến trình cha đợi các tiến trình con kết thúc mới tiếp tục, ta nói rằng:
Cha đồng bộ với con
Con độc lập với cha
Con chạy song song
Cha bị chặn bởi kernel
Tiến trình tự kết thúc bằng cách:
Thực hiện system call exit()
Bị hệ điều hành cưỡng bức hủy
Gọi hàm destroy()
Tự động khi hết thời gian CPU
Tiến trình có thể bị tiến trình khác kết thúc nếu tiến trình đó:
Có đủ quyền (ví dụ tiến trình cha gọi abort())
Có cùng trạng thái
Có độ ưu tiên thấp hơn
Cùng chia sẻ bộ nhớ
Hệ điều hành cần thu hồi gì khi tiến trình kết thúc?
Tài nguyên như bộ nhớ, I/O buffer, và PCB
Bộ đệm chương trình
Các hàm thư viện
File nguồn
Khi các tiến trình chia sẻ vùng nhớ chung, vấn đề gì có thể xảy ra?
Xung đột truy xuất dữ liệu (race condition)
Thiếu bộ nhớ ảo
Không thể đồng bộ
Gián đoạn CPU
Cơ chế IPC nào yêu cầu có vùng nhớ dùng chung?
Shared Memory
Message Passing
File Sharing
Pipe System
Trong mô hình IPC “Message Passing”, các tiến trình giao tiếp thông qua:
Mailbox hoặc Port
Shared memory
File tạm
Stack chung
Trong giao tiếp trực tiếp (direct communication), lệnh gửi thông điệp có dạng:
send(P, message)
send(mailbox, message)
send(msg)
send_all(message)
Trong giao tiếp gián tiếp (indirect communication), tiến trình gửi/nhận qua:
Mailbox hoặc cổng (port)
Bộ nhớ chính
File hệ thống
Thanh ghi
Cơ chế “blocking send” nghĩa là:
Tiến trình gửi bị dừng cho đến khi thông điệp được nhận
Tiến trình gửi tiếp tục chạy
Cả hai tiến trình bị treo
Hệ điều hành tạm dừng I/O
“Nonblocking receive” nghĩa là:
Tiến trình nhận sẽ tiếp tục nếu chưa có thông điệp
Tiến trình nhận phải đợi
Hệ điều hành chặn tiến trình
CPU bị ngắt
Nếu vùng đệm (buffer) có kích thước bằng 0, đó là mô hình:
Zero-capacity (no buffering)
Bounded-capacity
Unbounded-capacity
Shared buffer
“Bounded-capacity” queue nghĩa là:
Hàng đợi chứa được số lượng thông điệp giới hạn
Không có giới hạn kích thước
Không chứa được thông điệp
Dựa trên shared memory
“Unbounded-capacity” nghĩa là:
Hàng đợi có độ dài không giới hạn
Hàng đợi không có phần tử
Hàng đợi được giới hạn CPU
Hàng đợi chạy trong kernel
Tiểu trình (thread) là:
Đơn vị cơ bản sử dụng CPU trong tiến trình
Một chương trình độc lập
Một tiến trình con riêng biệt
Vùng nhớ chia sẻ
Mỗi thread có các phần riêng:
Thread ID, PC, Registers, Stack
Code, Data, Heap
File, Port, PCB
Kernel, User, Buffer
Thread chia sẻ chung các phần nào trong tiến trình?
Code, Data, và tài nguyên hệ thống
Stack
Thanh ghi
PC
PCB (Process Control Block) lưu danh sách các thread tại trường nào?
Threads list
Thread Control Block
Scheduling statistic
Context
TCB (Thread Control Block) chứa thông tin gì?
Trạng thái thread, context cục bộ (stack, IP)
Mã chương trình
Dữ liệu toàn cục
Bộ nhớ heap
Ưu điểm của đa luồng (multithreading) là:
Tạo và chuyển ngữ cảnh nhanh hơn tiến trình
Tăng dung lượng bộ nhớ
Giảm hiệu suất CPU
Tăng overhead hệ thống
Trong hệ thống đa lõi (multiprocessor), đa luồng cho phép:
Thực hiện song song các luồng
Chỉ chạy một luồng tại một thời điểm
Cấm chia sẻ tài nguyên
Giảm hiệu năng
Mô hình tiểu trình người dùng (User Thread) hoạt động trong:
User mode
Kernel mode
Cả hai
Hệ thống file
Trong mô hình tiểu trình hạt nhân (Kernel Thread):
Thread được quản lý bởi nhân hệ điều hành
Thread chỉ do người dùng tạo
Không thể đồng bộ
Không chia sẻ code
Mô hình “Many-to-One” có đặc điểm:
Nhiều thread người dùng ánh xạ vào một thread nhân
Mỗi thread người dùng ánh xạ riêng
Một thread nhân ánh xạ nhiều thread nhân khác
Không có ánh xạ
Nhược điểm của mô hình “Many-to-One” là:
Một thread bị block khiến toàn bộ thread bị block
Không thể chạy nhiều tiến trình
Không thể cấp CPU
Không chia sẻ tài nguyên
Ưu điểm của mô hình “One-to-One” so với “Many-to-One” là:
Tính đồng thời tốt hơn, vì một thread bị block không ảnh hưởng thread khác
Tốn ít bộ nhớ hơn
Không cần hệ điều hành hỗ trợ
Không cần nhân hệ thống
Trong mô hình “Many-to-Many”, các tiểu trình người dùng được ánh xạ như thế nào?
Nhiều tiểu trình người dùng ánh xạ với nhiều tiểu trình hạt nhân
Một–một
Nhiều–một
Một–nhiều
Ưu điểm lớn nhất của mô hình “Many-to-Many” là:
Giải quyết được hạn chế của hai mô hình còn lại
Tăng tốc CPU
Giảm số lượng tiến trình
Không cần lập lịch
Nhược điểm chính của mô hình “Many-to-Many” là:
Khó cài đặt, phức tạp trong quản lý
Không chia sẻ dữ liệu
Không hỗ trợ đa lõi
Không chạy song song
Trong các hệ điều hành hiện nay, mô hình được sử dụng phổ biến nhất là:
One-to-One
Many-to-One
Many-to-Many
Hybrid
Chức năng chính của “Context Switch” là gì?
Lưu trạng thái tiến trình hiện tại và khôi phục tiến trình kế tiếp
Xóa tiến trình
Sao chép dữ liệu vào bộ nhớ
Tạo tiến trình mới
Trong lập lịch CPU, nếu ưu tiên cho tiến trình có thời gian CPU ngắn nhất, đó là:
SJF (Shortest Job First)
FCFS (First Come First Serve)
RR (Round Robin)
Priority Scheduling
Trong hệ thống chia thời, mục tiêu của định thời là:
Giảm thời gian đáp ứng người dùng
Tăng tốc nhập xuất
Giảm số lượng tiến trình
Giảm số lần context switch
Khi nào xảy ra chuyển trạng thái “running → waiting”?
Khi tiến trình yêu cầu I/O hoặc sự kiện bên ngoài
Khi tiến trình bị lỗi
Khi CPU hoàn thành chương trình
Khi tiến trình chờ CPU
Khi nào xảy ra chuyển trạng thái “waiting → ready”?
Khi I/O hoàn tất hoặc tín hiệu được gửi đến
Khi tiến trình kết thúc
Khi CPU bị ngắt
Khi người dùng yêu cầu
Trong mô hình cây tiến trình, tiến trình “init” trong Linux có vai trò gì?
Tiến trình gốc của toàn bộ hệ thống (PID = 1)
Tiến trình con của kernel
Tiến trình ngẫu nhiên
Tiến trình thử nghiệm
Lệnh fork() trong Unix trả về giá trị gì cho tiến trình cha?
PID của tiến trình con
0
-1
Không trả về gì
Lệnh fork() trả về giá trị gì cho tiến trình con?
0
PID của cha
-1
1
Nếu fork() trả về giá trị âm, điều đó nghĩa là:
Tạo tiến trình thất bại
Thành công
Đang chạy song song
Không có tác dụng
Giả sử chương trình có 2 lệnh fork() liên tiếp, sẽ tạo ra bao nhiêu tiến trình?
4 tiến trình 22
2 tiến trình
3 tiến trình
5 tiến trình
Trong đoạn mã: pid = fork(); if (pid == 0) fork(); Sẽ tạo ra bao nhiêu tiến trình sau khi chạy?
3 tiến trình
2 tiến trình
4 tiến trình
1 tiến trình
Khi tiến trình cha kết thúc trước, tiến trình con sẽ trở thành:
Orphan process (tiến trình mồ côi)
Zombie process
Terminated
Idle
Khi tiến trình con kết thúc nhưng chưa được thu hồi bởi cha, nó sẽ trở thành:
Zombie process
Orphan process
Sleeping process
Blocked process
Trong IPC, phương pháp nào phù hợp để gửi dữ liệu nhỏ, ngắn gọn giữa tiến trình?
Message Passing
Shared Memory
File Mapping
RPC
Trong IPC, phương pháp nào cho phép tốc độ truyền cao hơn?
Shared Memory
Message Passing
File IO
Signal
Cơ chế đồng bộ trong shared memory nhằm:
Đảm bảo các tiến trình không truy cập cùng lúc vào vùng dữ liệu chung
Giảm dung lượng bộ nhớ
Ngăn chia sẻ dữ liệu
Tăng số tiến trình
Khi xảy ra context switch, trạng thái tiến trình hiện tại được lưu vào đâu?
Process Control Block (PCB)
Stack
Heap
Register file
Mỗi lần chuyển ngữ cảnh (context switch) sẽ làm:
Giảm hiệu năng do overhead hệ thống
Tăng tốc CPU
Giảm số tiến trình
Tăng dung lượng bộ nhớ
Thông tin nào KHÔNG được lưu trong PCB?
Nguồn cấp điện của CPU
Thanh ghi
Trạng thái tiến trình
Thông tin định thời
Tại sao việc định thời lại cần thiết trong hệ điều hành đa chương?
Vì có nhiều tiến trình cạnh tranh cùng CPU
Vì chỉ có một tiến trình
Để giảm dung lượng RAM
Để tăng tốc GPU
Khi một tiến trình yêu cầu I/O, điều gì xảy ra?
Tiến trình bị chặn và chuyển sang trạng thái waiting
Tiến trình bị xóa
Tiến trình chạy song song
Tiến trình vào ready queue
Khi I/O hoàn tất, tiến trình được chuyển sang:
Ready queue
Running queue
Waiting queue
Job queue
Bộ định thời CPU chọn tiến trình nào để chạy?
Tiến trình trong hàng đợi ready
Tiến trình trong hàng đợi waiting
Tiến trình trong job queue
Tiến trình trong I/O queue
Khi tiến trình kết thúc, hệ điều hành phải thực hiện bước nào đầu tiên?
Giải phóng tài nguyên và xóa PCB
Lưu lại trạng thái tiến trình
Gửi tín hiệu restart
Tạo tiến trình mới
Ưu điểm chính của shared memory so với message passing là:
Tốc độ giao tiếp nhanh hơn
Dễ lập trình hơn
Không cần đồng bộ
Giảm bộ nhớ
Nhược điểm của shared memory là:
Khó đồng bộ truy cập dữ liệu
Tốc độ chậm
Không chia sẻ được dữ liệu
Không an toàn
Ưu điểm của message passing là:
Không cần dùng chung bộ nhớ
Truy cập nhanh
Không cần đồng bộ
Tốc độ cao hơn shared memory
Tiểu trình (thread) khác với tiến trình (process) ở điểm nào?
Thread chia sẻ chung tài nguyên trong cùng process
Thread có không gian địa chỉ riêng
Thread luôn chạy độc lập
Thread không có stack
Việc tạo thread mới thường:
Nhanh hơn tạo process mới
Chậm hơn process
Giống hệt process
Không phụ thuộc hệ điều hành
Trong chương trình đa luồng, nếu một thread bị lỗi, ảnh hưởng có thể là gì?
Có thể làm hỏng toàn bộ process
Không ảnh hưởng gì
Chỉ lỗi riêng thread đó
Tự động khôi phục
Để đồng bộ nhiều thread trong cùng process, ta có thể dùng:
Mutex, Semaphore
Context switch
IPC message
Scheduler
Khi hai thread cùng ghi vào biến chung mà không đồng bộ, có thể gây ra:
Race condition
Deadlock
Starvation
Sleep
Để tránh “race condition” trong shared memory, cần dùng:
Cơ chế khóa (lock) hoặc semaphore
Shared variable
Fork()
I/O interrupt
Lý do sử dụng thread trong chương trình có tác vụ I/O là:
Giúp các phần khác của chương trình tiếp tục chạy khi I/O bị chặn
Tăng dung lượng bộ nhớ
Giảm số dòng code
Giảm overhead CPU
Khi một thread bị block do I/O trong mô hình Many-to-One, điều gì xảy ra?
Toàn bộ thread của process đó bị block
Chỉ thread đó bị block
Thread khác chạy tiếp
Hệ điều hành loại bỏ tiến trình
Trong mô hình One-to-One, khi một thread bị block:
Thread khác vẫn có thể chạy
Tất cả thread bị chặn
Thread cha cũng bị block
Hệ điều hành dừng process
Trong chương trình Unix, lời gọi wait() có chức năng gì?
Yêu cầu tiến trình cha chờ tiến trình con kết thúc
Tạo tiến trình con
Gửi tín hiệu đến kernel
Hủy tiến trình con
Nếu tiến trình cha không gọi wait() cho con, điều gì xảy ra?
Con trở thành zombie process
Con bị hủy ngay lập tức
Cha bị block
Kernel tự động xóa con
Trong Unix, exec() được dùng để:
Thay thế nội dung tiến trình hiện tại bằng chương trình mới
Tạo tiến trình con
Giết tiến trình
Dừng chương trình
Sự khác nhau giữa fork() và exec() là:
fork() tạo tiến trình mới, exec() nạp chương trình mới vào tiến trình hiện tại
Cả hai đều tạo tiến trình mới
Cả hai đều kết thúc chương trình
exec() tạo bản sao của tiến trình cha
Đoạn code: fork(); fork(); fork(); Sẽ tạo ra tổng cộng bao nhiêu tiến trình?
8 tiến trình ( 23 )
4 tiến trình
6 tiến trình
7 tiến trình
Trong hệ thống đa tiến trình, việc định thời không công bằng có thể gây ra:
Starvation (chết đói tiến trình)
Deadlock
Context switch
Race condition
Một tiến trình bị “starvation” nghĩa là:
Không bao giờ được cấp CPU dù vẫn sẵn sàng
Đang bị treo bởi I/O
Bị khóa vĩnh viễn
Đang thực thi bình thường
“Deadlock” xảy ra khi:
Các tiến trình chờ lẫn nhau giữ tài nguyên mà không tiến triển được
Một tiến trình chờ CPU
Một tiến trình kết thúc sớm
Tất cả tiến trình bị treo tạm thời
Trong sơ đồ lập lịch tiến trình, khi tiến trình chuyển từ running sang ready, nguyên nhân thường là:
Do có tiến trình ưu tiên cao hơn hoặc hết thời lượng CPU
Do I/O hoàn tất
Do tiến trình mới tạo
Do kết thúc chương trình
Ưu điểm chính của mô hình nhiều luồng trong cùng process là gì?
Chia sẻ tài nguyên và tăng tốc độ xử lý song song
Giảm tốc độ phản hồi
Giảm độ phức tạp
Tách biệt bộ nhớ
Trong lập trình đa luồng, lỗi “race condition” thường xảy ra khi:
Hai luồng truy cập cùng tài nguyên mà không đồng bộ
Mỗi luồng có vùng nhớ riêng
Các luồng không chia sẻ tài nguyên
Luồng bị treo bởi kernel
Một cách phổ biến để tránh “race condition” là:
Sử dụng mutex hoặc semaphore để khóa tài nguyên
Tắt chia sẻ bộ nhớ
Giảm số luồng
Sử dụng I/O delay
Khi nhiều luồng chia sẻ cùng một vùng dữ liệu mà không có cơ chế bảo vệ, kết quả là:
Không xác định (nondeterministic)
Luôn đúng
Luôn sai
Không thực thi được
Đặc điểm của thread trong mô hình One-to-One là:
Mỗi thread người dùng có một thread nhân tương ứng
Nhiều thread chia sẻ chung một nhân
Tất cả thread chạy trong user mode
Không thể block độc lập
Trong mô hình Many-to-Many, ai quyết định số lượng thread nhân được tạo?
Hệ điều hành
Người dùng
Compiler
Scheduler của tiến trình
Lợi ích của lập lịch đa cấp (multilevel queue scheduling) là:
Phân loại tiến trình theo tính chất và ưu tiên riêng
Mỗi tiến trình có ưu tiên bằng nhau
Giảm tốc độ CPU
Chỉ dành cho hệ thống đơn nhiệm
Trong hàng đợi định thời, tiến trình tương tác (interactive process) thường được ưu tiên:
Thời gian đáp ứng nhanh hơn (CPU short bursts)
Thời gian chạy dài hơn
Ưu tiên thấp nhất
Chỉ chạy nền
Tiến trình batch (chạy nền, không tương tác) thường được xếp vào:
Hàng đợi ưu tiên thấp (background queue)
Hàng đợi foreground
Hàng đợi ưu tiên cao
Hàng đợi thời gian thực
Khi một tiến trình bị swap ra khỏi bộ nhớ chính, bộ định thời nào chịu trách nhiệm?
Medium-term scheduler
Long-term scheduler
Short-term scheduler
IO scheduler
Khi tiến trình được swap trở lại bộ nhớ chính để chạy tiếp, nó chuyển từ:
Đĩa → Bộ nhớ → Hàng đợi ready
Ready → Waiting
New → Running
Terminated → Ready
