[운영체제]프로세스와 스레드 - 1

iamjinseo·2023년 2월 9일
0

스터디

목록 보기
7/8

들어가기 전에...

Java구조를 공부하다 보니 스레드 이야기가 많이 나와 이 부분을 알아가기로 했다.
대부분 학부시절 수강한 운영체제 자료를 참고하여 작성하였다.


프로세스와 스레드

프로세스란 실행 중인 프로그램의 인스턴스이다.

  • 프로세스는 각자의 메모리를 운영체제로부터 할당받는다. 파일을 여는 것과 네트워크에 연결하는 것 또한 프로세스이다.

  • 프로세스는 독립적으로 실행한다.

스레드란 프로세스 내의 실행 단위이며, 실제로 작업을 수행하는 주체이다.

  • 프로세스는 독립적으로 동시에 실행되는 여러 스레드를 포함할 수 있다.

  • 각 스레드는 pc(프로그램 카운터), 스택, 레지스터 세트를 가지지만 동일 프로세스 내 다른 스레드와 동일한 메모리 공간을 공유한다.

  • 같은 프로세스 내 스레드끼리 통신하고 데이터를 공유할 수 있다.

  • 스레드는 여러 task를 병렬 실행하여 응용프로그램의 성능을 향상시키는 데 유용하다.


💻프로세스

process in memory

메모리에 프로세스가 적재된 모습을 추상화하여 나타냈다.

  • Stack : 함수가 호출됐을 때 지역변수, 파라미터, 반환값을 저장한다.

  • Heap : 동적으로 만들어지는 데이터를 저장하는 영역이며 자바의 경우 가비지컬렉터가 자동 해제함

  • Data : 전역변수, 초기화된 데이터 저장

  • Code(text) : 컴파일된 코드가 저장되는 영역이며 읽기 전용

스택과 힙은 프로세스 여유 공간 반대쪽 끝에서 시작하여 서로를 향해 확장되므로 스택 오버플로 또는 malloc호출이 실패할 수 있다.


프로세스의 생성

운영체제가 프로세스를 만들어내려면 특정 프로세스를 복제해야 한다.

하나의 프로세스는 또다른 프로세스를 부모-자식 간 계층 관계로 생성한다. (Windows에는 없는 개념)

생성 순서

  1. fork()라는 시스템 콜을 부르면 자식 프로세스가 생성된다.
  2. 부모 프로세스는 전체 virtual address space를 복제해서 하나 더 만들어낸다.
  3. 내부 데이터나 정보를 자식 프로세스에 세팅한다.
  4. 부모 프로세스는 자식 프로세스의 pid를 받는다.

프로세스의 상태

  1. new : 새로운 프로세스 하나를 자식으로 만들어내면 new 상태가 된다.

  2. ready : 그 다음엔 ready 상태가 된다. 준비 큐에서 운영체제에 의해 CPU에 로드되길 기다리는 상태이다.

  3. running : 스케쥴러 디스패치에 의해 CPU에 로드되어 running 상태로 변경된다.
    3-1: 만약 running상태에서 CPU를 너무 많이 점유하면 인터럽트 써서 ready상태로 되돌린다.

  4. waiting : I/O 또는 다른 이벤트가 발생하면 waiting상태로 변경되어 Device queue에서 대기한다.
    4-1. 예를 들면 디스크에서 100기가를 읽을 때, 읽기를 끝날 때까지 waiting상태로 대기한다.

  5. terminated : 프로세스가 종료되고 CPU에서 제거된 상태이다.


PCB(Process Control Block)

각 프로세스마다 프로세스 고유의 정보를 저장하는 자료구조

PCB에는 프로세스 관련 모든 정보가 담겨있기 때문에 그 PCB자체가 어떤 특정 프로세스 하나를 대변한다고 할 수 있다.

PCB의 구조는 아래와 같다.

  • process state - waiting, running, ...

  • CPU registers, process counter: CPU안팎의 프로세스를 스왑할 때 저장 및 복원함

  • CPU scheduling information: 우선순위(priority)정보 및 스케쥴링 큐에 대한 포인터 등

  • Memory management information: 페이지 테이블 또는 세그먼트 테이블 등

  • Accountig information: 사용자 및 커널 CPU 사용 기간, 계정 번호, 제한 등

  • I/O status information, etc.: 디바이스 할당, 파일 테이블 열기 등


컨텍스트 스위치

CPU를 점유하던 프로세스가 인터럽트에 의해 다른 프로세스로 교체할 때, 기존 프로세스의 레지스터 값을 저장하고 새로운 프로세스의 레지스터값을 CPU 레지스터로 로드하는 것

컨텍스트 스위치는 매우 자주 발생하므로 CPU 사용시간에 손실을 발생할 수 있다. 따라서 상태 저장 및 복원(컨텍스트 스위치)의 속도를 매우 빠르게 해야한다.


프로세스 스케쥴링

프로세스를 순서대로 작동시키면 시간에 손실이 발생하기 때문에 고안된 방식

프로세스를 일정 시간 간격으로 아주 빠르게, 짧은 시간 내에 여러 번 switching 해서 프로세스들이 병렬적으로 실행되는 것처럼 보이게 함

Process state queues, 스케쥴링 큐

강의자료에는 Process state queues라고 적혀있는데 다른데는 다 스케쥴링 큐라고 함...


  • 운영체제는 시스템 내에 모든 프로세스의 상태를 나타내는 큐들을 저장한다.

    • Ready queue : running 상태로 넘어갈 준비가 된 프로세스들. 일반적인 스케쥴링 대상이다.
    • Wait queue: 여러 종류가 있음. Device, Timer, ....
      • 디바이스를 사용하기 위해 대기하는 큐
      • 디바이스를 사용해야할 때, PCB를 ready queue에서 wait queue로 옮긴다.
      • 사용 완료시 PCB는 다시 ready queue에 연결된다.
  • 각 PCB는 현재 상태에 따라 state queue(scheduling queue)에 들어간다.

  • 프로세스 상태가 바뀌면, PCB는 다른 큐로 마이그레이트 된다.


참고

영체제 강의자료
chatGPT
프로세스와 스레드 - http://www.tcpschool.com/java/java_thread_concept
process in memory - https://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/3_Processes.html
프로세스 - https://github.com/jeonyeohun/Getting-Ready-For-Interview/blob/main/OperatingSystem/01_Process.md
프로세스 스케쥴링 - https://velog.io/@jfe/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-Ch03.-Process#-process-scheduling

profile
일단 뭐라도 해보는 중

2개의 댓글

comment-user-thumbnail
2023년 2월 11일

학부생 때 운영체제 수업에서 들었던 프로세스 동작 방식은 머릿속에 잘 들어오지 않았었는데, 이렇게 깔끔하게 한 페이지로 정리해 주셔서 프로세스의 생명주기와 스케줄링에 대해 이해할 수 있었습니다.
좋은 글 감사합니다!

답글 달기
comment-user-thumbnail
2023년 2월 14일

좋은 글 감사합니다.
운영체제 공부할 때 스케쥴링 부분이 많이 어려웠었는데, 시간이 되시면 추가적으로 스케쥴링만 따로 포스팅 해주셔도 좋을 것 같습니다~

답글 달기