Hỏi về đoạn code chuỗi trạng thái của tiến trình

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)

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? :slight_smile:

2 Likes

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?

2 Likes

Code này có spawn cái gì đâu :smiley:

1 Like

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 ạ.

1 Like

Chuyển sang markdown phần đoạn code đi bạn ơi, để mình comment phần giải thích cho dễ

3 Likes

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);
}
3 Likes

ô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ành printf 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 đó :wink: )
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!

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?