리눅스 스터디 - 6
1. 프로세스란
- 실행중인 프로그램(cpu, 메로리, 파일, io장치등 자원요구)
- 시스템의 작업단위를 의미하기도 한다(요즘은 스레드 단위이지만..)
- 종류: 사용자 프로세스(user code실행), 시스템 프로세스(system code실행)
- reentrant 프로그램
재진입성(reentrant)은 메모리 내의 동일한 사본이 다중 사용자들에 의해 공유될 수 있도록 작성된 컴퓨터 프로그램이나 루틴을 의미
즉 같은 프로그램이 다른 프로세스로서 동시에 수행되는 것을 의미한다.
프로그램 코드는 동일하나 데이터와 stack섹션만 다르다
자세한 내용은 ucos2 스터디 - 2를 참조(구글이랑..)
2. 프로세스가 가지는 정보
- 프로그램 코드+현재 활동중인 정보
PC(program counter)
레지스터 값
스택(stack): 서브루틴, 매개변수, 복귀주소, 임시변수 등
데이터 섹션(data section): 전역변수
3. 프로세스 상태
- 생성(new):프로세스를 생성
- 수행(running): cpu가 실행
- 대기(wating): I/O나 신호, 이벤트를 기다림
- 준비(ready): cpu에 올라가 실행(running)할 준비가 됨
- 종료(terminated): 프로세스 종료
=> 추가적으로 suspend, resume가 있다
suspend: system에 이상이 생기는 경우(system에 overload가 걸리는 등), 잠시 중단
resume: system의 기능이 회복되면 재수행하게 한다
- 일반적인 프로세스 상태 전이도
추가 참조: http://booolean.tistory.com/494
- 리눅스의 프로세스 상태는 PCB와 file descriptor(=process table entry)의 state필드에 저장되어있다
- state필드는 flag배열로 구성되면 각 flag는 프로세스 상태를 나타낸다
- 리눅스의 프로세스 상태
TASK_RUNNING: 프로세스가 실행중이거나 실행되기를 기다리는 상태(즉, ready와 running)
TASK_INTERRUPTIBLE: 프로세스가 어떠한 조건을 만족할 때까지 중단된 상태, 조건으로는 하드웨어 인터럽트, 자원, 시그널등이 있다.
TASK_UNINTERRUPTIBLE: 어떤 특정한 조건을 기다리는 도중 어떠한 인터럽트토 허용하지 않는 상태
TASK_STOPPED: 프로세스가 중단됨을 나타냄(SIGSTOP, SIGTSTP, SIGTTIN, SIGTTOU 시그널을 받을 경우)
TASK_ZOMBIE: 프로세스가 종료되었지만 어떤이유로 task벡터에 task_struct정보가 남아있는 상태
※ file descriptor(=process table entry)
- 리눅스, 유닉스에서 파일이나 I/O장치에 접근하기 위해 사용하는 '추상화시켜놓은 지표'를 의미한다
- 리눅스는 파일디스크립터를 이용해 장치에 접근한다(윈도우의 핸들과 비슷한 역할을 한다)
- 자세히 이야기하면, open()을 통해 장치, 일반파일을 열게되면 디스크립터 번호가 부여되고 이는 open file descriptor table에 저장되어 관리된다(물론 커널이 이를 관리)
- open file descriptor table에는 파일 디스크립터에 대한 동작제어 플래그, 열린파일을 가리키는 참조(여기에는 파일의 offset, flag, 접근모드, I/O관련 설정, i-node등이 있다)를 가지고 있다.
※ PCB와 file descriptor간 차이는 아래를 참조
https://s2kiess.blog.me/220130051681
https://s2kiess.blog.me/220119492474
4. 프로세스 상태확인 관련 명령어
- ps -aux : 프로세스 시작시간, stat가있음
- top : NI우선순위 확인가능
- pstree : 트리모양으로 확인가능
- cat /proc/1/status : 가상파일시스템의 특정프로세스의 상태정보를 cat로 출력
- fg, bg : 포그라운드와 백그라운드에서 실행되는 프로세스 확인(jobs: 현재실행되는 작업의 상태출력, '리눅스 스터디 - 3' 참조)
5. STAT값의 의미(ps -aux명령을 쳤을시 나옴)
- R: 실행중 혹은 실행될수 있는 상태
- S: sleep
- I: idle(BSD: 비활동상태, sysV: 중간적 상태)
- T: 정지된 상태(suspend)
- Z: 좀비 프로세스
- D: 디스크 관련 대기상태(BSD)
- P: 페이지 관련 대기상태(BSD)
- X: 메모리 확보를 위해 대기중(sysV)
- K: 사용 가능한 커널 프로세스(aix)
- W: 스왑 out된 상태
- N: 우선순위가 인위적으로 낮아진 상태(nice설정 +)
- >: 우선순위가 인위적으로 높아진 상태(nice설정 -)
- 참조: https://blog.naver.com/kor_secom/70186675630
6. PCB(프로세스 제어 블럭, Process Control Block)
- 프로세스의 모든 정적 및 동적 정보를 가지고 있다.
- 커널은 PCB를 통해 프로세스를 관리한다
- PCB가 가지고 있는 정보
- pcb는 일반적으로 구조체에 필드를 이용해 pcb를 구성한다
'Study > Linux' 카테고리의 다른 글
프로세스 생성 및 삭제 실습(fork, exec[execl, execv], fork+exec, wait) (0) | 2018.02.05 |
---|---|
리눅스 스터디 - 7 (0) | 2018.02.05 |
정적, 동적 라이브러리 실습 (0) | 2018.01.22 |
리눅스 스터디 - 5 (0) | 2018.01.21 |
리눅스 스터디 - 4 (0) | 2018.01.21 |