Mọi người giải thích giúp em vì sao có được đáp án như bên dưới với ạ, do đọc mà em không hiểu nó tương thích như thế nào… Em cảm ơn ạ!!!
Đáp án (chuỗi tiến trình) cho đoạn code trên:
new -> ready -> running -> waiting -> ready -> running -> waiting -> ready -> running -> waiting -> ready -> running -> waiting -> ready -> running -> waiting -> ready -> running -> waiting -> ready -> running -> terminated.
(6 lần waiting, 7 ready, 7 running)
Hỏi về đoạn code chuỗi trạng thái của tiến trình
Hi there,
Cậu có thể chạy chương trình và chụp màn hình chứng minh đáp án của chuỗi tiến trình cho đoạn code trên là như vậy được không?
sorry Ad, do đây là đáp án thầy đưa nên em không hiểu cách làm ntn ý T_T
Ồ, tớ không phải quảng cáo “ad” đâu cậu :))
Hm, cậu có thể cung cấp cho bọn tớ 1 chút background về đoạn code của cậu được không? Cậu đang học course nào vậy?
Code này có spawn cái gì đâu
em đang học hệ điều hành bài CPU scheduling ý, đề cho đoạn code như vậy và yêu cầu tìm chuỗi trạng thái của process, em học ở trường của em ạ.
Chuyển sang markdown phần đoạn code đi bạn ơi, để mình comment phần giải thích cho dễ
Dạ đây ạ ^^
int main( int argc, char** argv)
{
int a, i = 2;
while (i <= 5)
{
if (i % 2 == 0)
{
a = 5 * 4;
printf (“ Gia tri so a = %d, &a);
printf (“%d la so chan”, &i);
}
else
{
a = 5 * 9;
printf (“Gia tri so a=%d”, &a);
}
}
exit(0);
}
int main( int argc, char** argv)
{
int a, i = 2;
printf(“new ”);
while (i <= 5)
{
if (i % 2 == 0)
{
a = 5 * 4;
printf(“ready running waiting “);
/* printf (“ Gia tri so a = %d, &a); */
printf(“ready running waiting “);
/* printf (“%d la so chan”, &i); */
}
else
{
a = 5 * 9;
printf(“ready running waiting “);
/* printf (“Gia tri so a=%d”, &a); */
}
}
printf(“ready running terminated”);
exit(0);
}
ôi em cảm ơn ạaaaa…
Tớ có chút comment ở đây:
Đầu tiên, tớ muốn đề cập về code của cậu.
- Trong hình ảnh cậu đưa có i++, nhưng trong code của cậu không có.
-
printf &a
nên sửa thànhprintf a
- Code này sẽ chạy rất nhanh, nên việc cậu capture toàn bộ trạng thái của process sẽ hơi khó đấy. Tớ nghĩ cậu nên, hoặc có nhiều vòng lặp hơn, hoặc cậu để vòng lặp vô hạn.
Tiếp theo, tớ muốn nói tới yêu cầu của đề bài:
Với yêu cầu của đề bài, cậu phải theo dõi trạng thái của process sau khi chạy đoạn code trên, không phải in ra dòng “new -> ready…” ra màn hình (@hungaya đang troll cậu đó )
Tớ có chạy thử code của cậu (version không có i++, tớ nghĩ cần vòng lặp vô hạn để có đủ thời gian theo dõi process state), và theo dõi state của tiến trình bằng lệnh top
:
# Compile the test.c
make test
# Run the code
./test
## and check the status in a different terminal
top -pid `pgrep test`
Đây là screenshot:
Cậu có thể follow procedure trên để kiểm tra.
Hope it helps!