개발자꿈나무

프로세스와 스레드 본문

CS/운영체제론

프로세스와 스레드

망재이 2024. 10. 27. 16:42
프로세스

 

  • 프로세스의 정의
    - 실행 중인 프로그램
    - 디스크에 저장되어 있던 실행 가능한 프로그램이 메모리에 적재되어 운영체제의 제어를 받는 상태로 해당 프로세스가 사용하고 있는 메모리 영역
    - 프로세스는 반드시 한 개의 PCB (Process Control Block) 와 연결
    - 비동기적 행위를 일으키는 주체
    - 운영체제에서 작업의 기본 단위
    - 실행 중인 프로시저
    - 디스패치가 가능한 대상

  • 프로세스의 일반적인 메모리 구조
    - 프로그램은 컴파일한 코드와 초기화 전역변수, 문자열과 문자열 상수 등 정적 데이터를 포함하는 정적 개체
    - 프로세스는 프로그램 카운터나 레지스터처럼 현재 어떤 자원을 사용하는지 관계 정보가 들어있는 동적 개체

  • 스택 (stack)
    - 데이터를 일시적으로 저장하는 영역
    - 지역변수, 호출한 함수의 반환 주소, 반환 값, 매개변수 등에 사용
    - 함수를 호출할수록 커지고 반환하면 줄어듦

  • 힙 (heap)
    - 코드 영역과는 별도로 유지되는 자유영역
    - 동적으로 메모리를 할당하려고 프로그램 실행 중 시스템 호출을 사용했다가 해제하는 방법으로 활용

  • 데이터 (data)
    - 프로그램의 가상주소 공간
    - 전역변수나 정적변수를 저장하거나 할당하고 실행하기 전에 초기화

  • 코드 (code)
    - 실행 명령을 포함하는 메모리이거나 목적 파일에 있는 프로그램 영역
    - 프로그램을 시작할 때 프로세서가 디스크에서 읽어 실행하는 컴파일한 프로그램을 저장



프로세스의 종류

 

  • 역할에 따른 분류
    - 시스템 (커널) 프로세스 : 모든 시스템 메모리와 프로세서의 명령에 액세스할 수 있는 프로세스로 프로세스 실행 순서를 제어하거나 다른 사용자 및 커널 영역을 침범하지 못하게 감시하고, 사용 프로세스를 생성하는 기능을 함
    - 사용자 프로세스 : 사용자 코드를 수행하는 프로세스

  • 병행 수행 방법에 따른 분류
    - 독립 프로세스 : 다른 프로세스에 영향을 주지 않거나 다른 프로세스의 영향을 받지 않으면서 수행하는 병행 프로세스
    - 협력 프로세스 : 다른 프로세스에 영향을 주거나 다른 프로세스에서 영향을 받는 병행 프로세스
더보기

Q. 사용자 수준에서 지원되는 스레드(thread)가 커널에서 지원되는 스레드에 비해 가지는 장점으로 옳은 것은?

1. 한 프로세스가 운영체제를 호출할 때 전체 프로세스가 대기할 필요가 없으므로 시스템 성능을 높일 수 있다.

2. 동시에 여러 스레드가 커널에 접근할 수 있으므로 여러 스레드가 시스템 호출을 동시에 사용할 수 있다.

3. 각 스레드를 개별적으로 관리할 수 있으므로 스레드의 독립적인 스케줄링이 가능하다.

4. 커널 모드로의 전환 없이 스레드 교환이 가능하므로 오버헤드가 줄어든다.

 

Q. 입력되는 데이터를 컴퓨터의 프로세서가 처리하기 전에 미리 처리하여 프로세서가 처리하는 시간을 줄여주는 프로그램이나 하드웨어를 말하는 것은?

1. EAI

2. FEP

3. GPL

4. Duplexing

 

-> 1. EAI(Enterprise Application Integration) : 기업 응용 프로그램 통합으로 기업용 응용 프로그램의 구조적 통합 방안

2. FEP(Front-End Processor) 

3. GPL(General Public License) : 자유 소프트웨어 재단에서 만든 자유 소프트웨어 라이선스

4. Duplexing : 이중화

 

프로세스 상태

 

 

  • 프로세스 상태
    - 생성 : 프로세스의 작업 공간이 메인 메모리에 생성되고 운영체제 내부에 프로세스의 실행정보를 관리하기 위한 프로세스 제어 블록(PCB)이 만들어지는 상태
    - 준비 : 프로세서에게 할당되기를 기다리는 상태
    - 실행 : 프로세서를 점유하여 명령어들이 실행되는 상태
    - 대기 : 프로세서가 어떤 이벤트가 일어나기를 기다리는 상태
    - 완료 : 프로세스의 수행이 끝난 상태

  • 프로세스 상태 변환
    - 준비 -> 실행 (디스패칭 [dispatching]) : 준비 상태의 프로세스는 디스패처에 의해 프로세서가 부여되면 실행상태가 됨
    - 실행 -> 준비 (time run out) : 어떤 프로세스가 프로세서를 계속 독점하는 것을 방지하기 위해 운영체제는 인터럽트 클록을 두어서 지정된 시간 동안만 프로세스가 프로세서를 점유하도록 함
    - 실행 -> 대기 (block) : 실행상태의 프로세스가 지정된 시간 이전에 입출력 연산 등을 필요로 할 경우 그 프로세스는 스스로 프로세서를 양도하게 됨
    - 대기 -> 준비 (wake up) : 입출력 작업이 끝났을 때, 대기 상태의 프로세스는 준비 상태로 변환

더보기

Q. 프로세스의 상태를 생성, 준비, 실행, 대기, 종료의 5가지로 나누어 설명할 때 각 상태에 대한 설명으로 옳지 않은 것은?

1. 생성 - 프로세스의 작업 공간이 메인 메모리에 생성되고 운영체제 내부에 프로세스의 실행정보를 관리하기 위한 프로세스 제어 블록이 만들어진다.

2. 준비 - 프로세스가 CPU 할당을 기다리는 상태로, 단일 프로세서 시스템에서 여러 개의 프로세스들이 동시에 이 상태에 있을 수 있다.

3. 실행 - 프로세스가 CPU를 할당받아 작업을 수행하고 있는 상태로, 단일 프로세서 시스템에서는 오직 하나의 프로세스만 이 상태에 있을 수 있다.

4. 대기 - 프로세스가 어떤 이벤트가 일어나기를 기다리는 상태로, 프로세서의 실행 과정에서 여러 번 이 상태에 속하게 된다.

5. 종료 - 프로세스가 작업 수행을 끝낸 상태로, 프로세스에 할당된 모든 자원을 부모 프로세스에게 돌려준다.

 

-> 종료 상태는 프로세스가 작업 수행을 끝낸 상태로, 프로세스에 할당된 모든 자원을 OS에 돌려주면 관련 PCB가 삭제

 

 

프로세스 제어 블럭 (PCB; Process Control Block)

 

- 운영체제에 특정 프로세스에 대한 중요한 정보를 제공해 주는 데이터 블록
- 프로세스를 생성할 때 만들어지며 주기억장치에 유지되며 운영체제 내에서 한 프로세스의 존재를 정의하며, 프로세스의 실행이 종료되면 같이 삭제됨
- 인터럽트 처리, 자원할당, 스케줄링 등을 수행하는 운영체제의 모든 모듈에 의해 판독되고 수정될 수 있음

프로세스 식별자 각 프로세스의 고유 식별자
프로세스 상태 생성, 준비, 실행, 대기, 중단 등 상태 표시
프로그램 카운터 프로세스를 실행하는 다음 명령의 주소 표시
레지스터 저장 영역 누산기, 인덱스 레지스터, 스택 포인터, 범용 레지스터, 조건 코드 등의 정보를 담고 있으며 컴퓨터 구조에 따라 수나 형태가 다름
인터럽트가 발생하면 프로그램 카운터와 함께 저장
프로세서 스케줄링 정보 프로세스의 우선순위, 스케줄링 큐의 포인터, 기타 스케줄 매개변수
계정 정보 프로세서 사용시간, 실제 사용시간, 사용 상한시간, 계정번호, 작업이나 프로세스 번호 등
입출력 상태 정보 특별한 입출력 요구 프로세스에 할당된 입출력장치, 열린 파일 리스트 등
메모리 관리 정보 운영체제가 사용하는 메모리 시스템에 따른 상한 하한 레지스터, 페이지테이블이나 세그먼트 테이블 값

 

* 프로세스 생성 시 필요한 세부 작업
1. 새로운 프로세스에 프로세스 식별자를 할당

2. 프로세스의 모든 구성 요소를 포함할 수 있는 주소 공간과 프로세스 제어 블록 공간을 할당
3. 프로세스 제어 블록을 초기화 (프로세스 상태, 프로그램 카운터 등 초기화, 자원 요청, 프로세스 제어 정보 등을 포함)

4. 해당 준비큐에 삽입

 

 

 

문맥교환 (Context Swtiching)

 

- 프로세서를 다른 프로세스로 전환하려면 이전의 프로세스 상태 레지스터 내용을 보관하고, 다른 프로세스의 레지스터들을 적재하는 과정을 말함
- 프로세스가 '준비 > 실행', '실행 -> 준비', '실행 -> 대기' 상태로 변환할 때 발생

- 문맥교환을 모두 과부하가 발생

- 운영체제에서 문맥교환은 자주 발생하므로 가능한 효율적으로 구현되어야 하는데 이를 위해 스레드를 사용

 

 

 

스레드 (Thread)

 

  • 스레드의 개념
    - 프로세스는 자원과 제어로 특성을 구분할 수 있는데 이 중 제어만 분리한 실행 단위를 스레드라고 함
    - 프로세스 하나는 스레드 한 개 이상으로 나눌 수 있음
    - 스레드들은 프로세스의 직접 실행 정보를 제외한 나머지 프로세스 관리 정보를 공유
    -> 프로그램 카운터와 스택 포인터 등을 비롯한 스레드 실행 환경 정보, 지역 데이터, 스택을 독립적으로 가짐
    -> 코드, 전역 데이터, 힙을 다른 스레드와 공유
    - 응용 프로그램에는 적어도 한 개 이상의 프로세스가 있고, 프로세스에는 한 개 이상의 스레드가 있음
    - 같은 프로세스의 스레드들은 동일한 주소 공간을 공유함

 

  • 스레드의 이점
    - 프로세스의 자원과 메모리 공유 기능 : 스레드들이 프로세스 자원 하나와 메모리를 공유하므로 응용 프로그램 하나가 동일한 주소 공간에서 스레드를 여러 개 실행하여 시스템 성능을 향상시킬 수 있음
    - 경제성 향상 : 프로세스를 생성하는 것보다 스레드를 생성하여 문맥 교환을 수행하면 오버헤드가 줄어듬
    - 다중처리(멀티 프로세스)로 성능과 효율 향상 : 각 스레드를 여러 프로세서에서 병렬로 실행하여 성능과 효율성을 높일 수 있음

더보기

Q. 프로세스와 스레드에 대한 설명으로 거리가 먼 것은?

1. 프로세스는 운영체제에서 작업의 기본 단위이다.

2. 프로세스는 비동기적인 행위를 일으키는 주체이다.

3. 프로세스는 현재 실행중인 프로그램이라고 정의할 수 있다.

4. 스레드는 프로세스에서 실행의 개념만을 분리한 것이다.

5. 하나의 스레드 내에는 여러 개의 프로세스가 존재할 수 있다.

 

-> 하나의 프로세스 내에는 여러 개의 스레드가 존재할 수 있다.

 

Q. 다음은 다중스레드에 관련된 설명이다. 옳지 않은 것은?

1. 하나의 프로세스에 2개 이상의 스레드들을 생성하여 수행한다.

2. 스레드별로 각각의 프로세스를 생성하여 실행하는 것보다 효율적이다.

3. 스레드들 간의 IPC(InterProcess Communication) 방식으로 통신한다.

4. 각각의 스레드는 프로세스에 할당된 자원을 공유한다.

 

-> 한 프로세스 내의 스레드들은 서로 공유하는 메모리 영역으로 통신한다.

 

728x90

'CS > 운영체제론' 카테고리의 다른 글

미들웨어  (0) 2024.03.14
파일 시스템  (0) 2024.01.29
디스크 스케줄링  (0) 2024.01.29
가상 메모리  (0) 2024.01.28
메모리 관리  (0) 2024.01.28