리눅스 스터디 - 6

2018. 2. 4. 21:45

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를 구성한다

   

 

+ Recent posts