이번에는 프로세스 상태에 대한 공부를 해볼 것이다.
프로세스 상태는
new, ready, running, waiting, terminated로 나눠질수있습니다.
이런식의 로직을 가지고있다.
리눅스 기반에 운영체제에서 공부했습니다.
running.c 코드
#include<stdio.h>
int main()
{
do { } while (1);
}
아래와 같은 명령어를 사용해보자.
gcc -o running running.c
./running &
ps -l
1) ps -l 명령을 수행하면 프로세스의 상태는 어떻게 표시되는가?
- R로 표기된다.
2) ps -l 명령을 반복하여 수행해보면 표시는 바뀌는가, 그렇지 않은가?
- 바뀌지않는다.
3) 이 표시가 의미하는 프로세스의 상태는 무엇인가?
- 실행중 또는 실행가능 (실행 큐에 있음)
3)프로세스의 실제 상태는 변하고 있는가 그렇지 않은가?
- read ->running으로 running->read로 계속 바뀐다.
blocked1.c 코드
#include<stdio.h>
int main()
{
sleep(3600);
}
아래와 같은 명령어를 사용해보자.
gcc -o blocked1 blocked1.c
./blocked1 &
ps -l
1) ps -l 명령을 수행하면 프로세스의 상태는 어떻게 표시되는가?
- s로 표기된다.
2) ps -l 명령을 반복하여 수행해보면 표시는 바뀌는가, 그렇지 않은가?
- 바뀌지않는다.
3) 이 표시가 의미하는 프로세스의 상태는 무엇인가?
- 깨울수있는 sleep 상태이다. block상태
4)프로세스의 실제 상태는 변하고 있는가 그렇지 않은가?
- 변하지 않는다. 3600초가 지나면 ready상태로 돌아간다.
blocked2.c 코드
#include<stdio.h>
int main()
{
int a;
scanf(“%d”, &a);
}
아래의 명령어를 사용하자.
gcc -o blocked2 blocked2.c
./blocked2 //foreground로 수행
다른 터미널을 하나 더 실행시켜,
ps -l -u 자신의login_id
1) 프로세스의 상태는 무엇인가?
- s상태가된다
2) 프로세스의 실제 상태는 변하고 있는가 그렇지 않은가?
- 입력을 받으면 read로 갔다가 running으로 갔다가 종료된다.
blocked3.c 코드
#include<stdio.h>
int main()
{
int i;
do {
sleep(1);
for (i = 0; i < 100000000; i++);
} while (1);
}
아래의 명령어를 입력해보자.
gcc -o blocked3 blocked3.c
./blocked3 &
ps -l
1) ps -l 명령을 수행하면 프로세스의 상태는 어떻게 표시되는가?
- s 상태로 표기된다.
2) ps -l 명령을 반복하여 수행해보면 표시는 바뀌는가, 그렇지 않은가?
- 바뀐다. S ->R -> S로 변한다.
3)프로세스의 실제 상태가 어떤 변화를 겪고 있는지 적으시오.
- block상태에서 1초후에 ready로바뀌고 running으로 바뀌고 또반복한다..
러닝상태가 충분히 길면 block가아니라 바로 ready로 간다.
'혼자 공부하는 것들 > 운영체제' 카테고리의 다른 글
[운영체제] Race Condition, Mutual Exclusive(상호배제) 실습 (2) | 2020.10.02 |
---|---|
[운영체제] 스레드(Thread) + 실습을 통해 직접 깨우치기! 프로세스와의 차이점? (2) | 2020.09.28 |
[운영체제] fork 실습 -2 (2) | 2020.09.27 |
[운영체제] fork 실습 -1 (0) | 2020.09.27 |
[운영체제] system call (0) | 2020.09.27 |
댓글