리눅스데브코스 [5주차 - 3]<리눅스 프로세스>

심우열·2023년 5월 3일
0

1. 프로세스란?

  1. 실행중인 프로그램의 인스턴스
  2. 프로그램에서 제어 흐름의 캡슐화
  3. 동적이고 활동적인 개체
  4. 실행과 스케쥴링의 기본 단위
  5. 프로세스는 PID(Process ID)를 통해 이름지어짐

프로세스가 포함하고 있는것

  1. cpu contexts(레지스터)
  2. OS 자원(메모리, 열린 파일 등등)
  3. 기타 정보(PID, 활성상태, 소유자 등등)

1. 프로세스의 생성

1. 프로세스 계층

  1. 한개의 프로세스는 다른 프로세스를 생성 할 수 있다.(부모-자식 간의 관계처럼)
  2. Unix는 이러한 계층구조를 프로세스 그룹이라고 말함
  3. 윈도우에는 이러한 프로세스 계층 구조가 없다

프로세스 목록을 확인하는 방법

  1. 유닉스 계열에서는 ps
  2. 윈도우에서는 taskmgr

2. 프로세스 생성 이벤트

1. 시스템 콜 호출

  1. POSIX(Unix, Linux 등) 에서는 fork(), Win32에서는 createProcess()
  2. shell이나 Gui는 내부에서 시스템 콜을 통해 프로그램을 프로세스화 함

2. 시스템 초기화

  1. init 프로세스
  2. PID 1번을 가짐
  3. 모든 프로세스는 init의 자식 프로세스

3. 자원 공유

  1. 부모 프로세스는 자식 프로세스에게 자원이나 권한의 전부 또는 일부를 상속 할 수 있음

4. 실행

  1. 부모 프로세스는 자식 프로세스가 끝날때 까지 기다릴 수도 있고, 동시에 실행 될 수도 있다.

5. 주소 공간

  1. 자식 프로세스는 부모 프로세스의 메모리 주소 공간을 복제 함

3. fork() 시스템 콜

  1. 자식 프로세스를 생성할때 호출되는 시스템 콜
  2. 부모의 전체 가상 주소 공간을 복사하여 자식 프로세스를 생성
  3. 자식 프로세스를 관리하기 위해 내부 데이터 구조를 복사함
  4. 부모 프로세스는 자식 프로세스의 pid를 얻음
  5. 자식 프로세스는 0의 값을 갖는다

3. 프로세스 데이터 구조

1. PCB(Process Control Block)

  1. 각 프로세스는 한개의 프로세스를 지칭한다
  2. 리눅스는 task_struct라는 데이터 구조로 PCB를 관리함
  3. 프로세스에 대한 모든 정보를 가지고 있다.

2. 담고 있는 정보

  1. 프로세스 상태
  2. program counter
  3. Cpu 스케쥴링 정보
  4. 메모리 관리 정보
  5. 계정 정보
  6. I/O 상태 정보 등등

4. Context Switch(Process switch)

  1. CPU를 한 프로세스에서 다른 프로세스로 전환하는 것
  2. 초당 100번에서 1000번 사이의 Context Switch 가 발생함

1. 관리목적의 오버헤드

  1. 레지스터와 메모리 맵 저장 및 로딩
  2. 메모리 캐시를 플러싱하고 다시 로드하기
  3. 다양한 테이블과 목록 업데이트 등.

2. Context switch 오버헤드는 하드웨어에 영향을 많이 받는다

  1. 레지스터가 여러개면 더 적은 오버헤드
  2. 향상된 메모리 관리 기술은 더 적은 오버헤드

5. Process State Queue

1. State queues

  1. OS는 시스템의 모든 프로세스 상태를 나타내는 대기열 모음을 유지합니다.

queue의 종류

  1. Ready queue
  2. Wait queue: 디바이스, 타이머, 메세지 등 각 유형에 따라 여러 wait queue가 있을 수 있음
  1. 각 PCB는 현재 상태에 따라 상태 대기열에 대기
  2. 프로세스가 상태를 변경함에 따라, PCB는 다양한 대기열 간에 마이그레이션 됨

2. PCB와 State queue

1. PCB는 데이터 구조이다.

OS 메모리에 동적으로 할당 된다

2. 프로세스가 생성될 때

  1. OS는 프로세스에 PCB를 할당
  2. OS는 PCB를 초기화
  3. OS는 PCB를 올바른 queue에 위치시킴

3. 프로세스가 실행중일 때

OS는 PCB를 대기열에서 대기열로 옮김

4. 프로세스가 종료되면

OS는 PCB를 할당 해제한다.

6. UNIX에서 프로세스의 생성

1. int fork()

  1. 새 PCB를 만들고 초기화
  2. 새 주소 공간을 만들고 초기화
  3. 부모 주소 공간의 전체 내용의 복사본으로 주소 공간을 초기화
  4. 부모가 사용하는 리소스를 가리키도록 커널 리소스를 초기화(예: 파일 열기)
  5. ready queue에 PCB를 배치
  6. 자식의 PID를 부모에게 반환하고 자식에게 0을 반환

2. int exec(char prog, char argv[])

  1. 현재 프로세스를 중지
  2. 프로세스의 주소 공간에 프로그램 "prog"를 로드.
  3. 새 프로그램에 대한 하드웨어 컨텍스트와 args를 초기화
  4. ready queue에 PCB를 배치
    -> exec()는 새로운 프로세스를 생성하지 않음, fork()가 유일하게 새로운 프로세스 생성

7. Process Management

1. 프로세스의 종류

1. 데몬 프로세스

  • 특정 서비스를 제공하기 위해 존재하며 리눅스 커널에 의해 실행

2. 고아 프로세스

  • 자식 프로세스가 아직 실행 중인데 부모 프로세스가 먼저 종료된 자식 프로세스는 고아 프로세스
  • 1번 프로세스(init,systemd)가 고아 프로세스의 새로운 부모 프로세스가 되어 고아 프로세서의 작업 종료 지원

3. 좀비 프로세스

  • 자식 프로세스가 실행을 종료했는데도 프로세스 테이블 목록에 남아 있는 경우
  • 좀비 프로세스는 프로세스 목록에 defunct 프로세스라고 나오기도함
  • 좀비 프로세스가 증가하면 프로세스 테이블의 용량이 부족해서 일반 프로세스가 실행되지 않을 수도 있음

8. 프로세스 관리 명령

1. 프로세스 목록 보기: ps

  • 현재 실행중인 프로세스의 정보를 출력

1. 프로세스의 상세 목록 출력하기: ps -f

2. 터미널에서 실행한 프로세스의 정보 출력: ps -a[u]

  • STAT에 사용되는 문자의 의미
  • ps -au의 출력 정보

3.전체 프로세스 목록 출력하기: ps -e[f]

2. 특정 프로세스 정보 검색하기: pgrep

  • 지정한 패턴과 일치하는 프로세스의 정보를 출력

3. Signal

  • 프로세스에 무언가 발생했음을 알리는 간단한 메세지
  • 리눅스에서 지원하는 시그널의 목록은 kill -l 명령어로 확인 가능

주요 signal

4. 지정한 시그널을 프로세스에 보내기: kill

  • kill [-시그널] PID

pkill 명령을 이용해 프로세스 종료하기

  • PID가 아니라 프로세스의 명령이름(CMD)로 프로세스 찾아 종료

4. 프로세스 관리 도구

1. top

  • 현재 실행중인 프로세스에 대한 정보를 주기적으로 출력

top 명령의 출력 정보

2. GNOME

GUI 환경의 프로세스 관리 도구

profile
Dev Ops, "Git, Linux, Docker, Kubernetes, ansible, " .

0개의 댓글