스레드와 프로세스

김성준·2021년 12월 3일
0

CS

목록 보기
1/4

프로세스

프로세스의 정의

프로세스(process)는 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 말한다. 종종 스케줄링의 대상이 되는 작업(task)이라는 용어와 거의 같은 의미로 쓰인다.
컴퓨터 프로그램은 저장장치에 저장되어 있는 정적인 상태를 말한다. -> 작성된 프로그램이 실행되면 프로세스가 된다.

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

  • 프로세스 제어 블록(Process Control Block, 줄여서 PCB)은 특정한 프로세스를 관리할 필요가 있는 정보를 포함하는, 운영체제 커널의 데이터구조입니다. PCB는 운영 체제가 프로세스를 표현한 것이라 할 수 있습니다.
    운영체제에서 프로세스는 PCB로 나타내어지며, PCB는 프로세스에 대한 중요한 정보를 가지고 있는 자료구조입니다. 각 프로세스가 생성될 때마다 고유의 PCB가 생성되고, 프로세스가 완료되면 PCB는 제거됩니다.
  • 프로세스 제어블록의 구조

    1. 프로세스 식별자(Process ID)
    2. 프로세스 상태(Process State): 생성(create), 준비(ready), 실행(running), 대기(waiting), 완료(terminated) 상태가 있다.
    3. 유예준비상태suspended ready, 유예대기상태suspended wait 는 스택이 아닌 disk에 저장된다.
    4. 프로그램 계수기(Program Counter): 프로그램 계수기는 이 프로세스가 다음에 실행할 명령어의 주소를 가리킨다.
    5. CPU 레지스터 및 일반 레지스터
    6. CPU 스케줄링 정보: 우선 순위, 최종 실행시각, CPU 점유시간 등
    7. 메모리 관리 정보: 해당 프로세스의 주소 공간 등
    8. 프로세스 계정 정보: 페이지 테이블, 스케줄링 큐 포인터, 소유자, 부모 등
    9. 입출력 상태 정보: 프로세스에 할당된 입출력장치 목록, 열린 파일 목록 등

      프로세스 = 프로그램 + PCB

프로세스의 상태

1. 생성상태 : 프로세스가 메모리에 올라와 실행 준비를 완료한 상태. PCB가 생성된다.

2. 준비상태 : 생성된 프로세스가 CPU를 얻을 때까지 기다리는 상태.

3. 실행상태 : 준비상태의 프로세스가 CPU를 얻어 실제로 동작하고 있는 상태. 주어진 시간이 끝나면 준비상태로 돌아간다.

4. 대기상태 : 실행상태에 있는 프로세스가 입출력을 요청하면 그 프로세스는 입출력이 끝날때까지 대기상태가 된다. 대기상태에서 입출력이 끝난 프로세스는 다시 준비상태에서 CPU를 기다린다.

4. 완료상태 : 프로세스가 작업을 모두 마치고 PCB가 사라진 상태.

스레드

스레드의 정의

스레드는 프로세스 내에서 실행되는 흐름의 단위를 말한다. 실질적으로 CPU가 수행하는 작업의 실행 단위이다.

멀티스레드와 멀티태스킹의 차이

여러개의 작업을 동시에 처리하기 위해 fork() 시스템 호출을 사용하여 부모와 똑같은 프로세스를 생성할 수 있다. 하지만 이는 낭비적인 요소가 많다. fork() 로 프로세스를 복사하면 코드 영역과 데이터 영역의 일부가 메모리에 중복되어 존재하게 된다.
스레드는 이러한 멀티 태스킹의 낭비 요소를 제거하기 위해 사용된다. 비슷한 일을 하는 2개의 프로세스를 만드는 것이 아니라 코드, 데이터 영역을 공유하면서 여러 일을 하나의 프로세스 내에서 수행하는 것이다.

멀티스레드의 장단점

  • 장점

  1. 응답성 향상 : 한 스레드가 입출력으로 인해 작업이 진행되지 않더라도 다른 스레드가 작업을 계속하여 사용자의 작업 요구에 빠르게 응답 가능.
  2. 자원 공유 : 프로세스가 가진 자원을 모든 스레드가 공유하게 되어 작업을 원활하게 진행 가능.
  3. 효율성 향상 : 여러 개의 프로세스를 만들 때, 생성되는 불필요한 자원 낭비를 막을 수 있음.
  4. 다중 CPU 지원 : 2개 이상의 CPU를 가진 컴퓨터에서 멀티 스레드를 사용하면 프로세스 처리 시간의 단축을 기대할 수 있음.
  • 단점

    1. 임계 영역(Critical Section) 문제 : 둘 이상의 스레드가 동시에 실행하면 문제를 일으키는 코드 블록. 공유 자원에 동시에 접근하는 경우, 어떤 스레드가 다른 스레드에서 사용 중인 변수나 자료구조에 접근하여 엉뚱한 값을 읽어오거나 수정할 수 있다. 동기화로 해결 가능.
    2. 동기화로 인한 오버헤드 가능성 : 동기화를 통해 스레드의 작업 처리 순서와 공유 자원에 대한 접근을 컨트롤할 수 있다. 그러나 불필요한 부분까지 동기화를 하는 경우, 과도한 lock으로 인해 성능이 저하될 가능성이 높기 때문에 주의해야 한다.

출처

https://jwprogramming.tistory.com/16 [개발자를 꿈꾸는 프로그래머]
https://ko.wikipedia.org/wiki/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4_%EC%A0%9C%EC%96%B4_%EB%B8%94%EB%A1%9D
https://ko.wikipedia.org/wiki/%EC%8A%A4%EB%A0%88%EB%93%9C_(%EC%BB%B4%ED%93%A8%ED%8C%85)
조성호, 『쉽게 배우는 운영체제』, 한빛미디어(2018)
출처: https://eun-jeong.tistory.com/20 [흔들리며 피는 꽃]

profile
수신제가치국평천하

0개의 댓글