20210121 - TIL

Starve·2021년 1월 21일
0

TIL

목록 보기
15/38
post-thumbnail

TIL

  • 프로세스(Process)

    • 메모리에서 CPU를 할당받아, 프로그램이 실행 되고 있는 상태.
      컴퓨터 내에서 실행되고있는 컴퓨터 프로그램의 한 단위.

    • 가상 메모리에 매핑 되어 독립적인 메모리 영역(Code, Data, Stack, Heap)을 할당받는다.

      1. Code 영역:명령어가 기계어로 저장되는 메모리 영역.

      2. Data 영역: 전역 변수와 정적 지역 변수(static)가 포함되어 있는 영역.

      3. Stack 영역: 지역 변수, 함수, return address를 포함하고 있는 영역.

      4. Heap 영역: 프로그램이 실행되는 동안 동적으로 사용할 데이터들이 저장되는 영역.

    • 프로세스에는 수행 중인 작업을 나타내는 실행상태가 있다.
      프로세스가 실행되면 상태간의 이동이 일어난다.

      • 생성(create): 프로세스가 생성되는 중이다.
      • 실행(running): 프로세스가 CPU를 차지하여 명령어들이 실행되고 있는 상태.
        현재 CPU를 제어하는 프로세스.
      • 준비(ready): 프로세스가 CPU를 사용하고 있지는 않지만, 언제든지 사용할 수 있는 상태.
        CPU가 할당되기를 기다리고 있다.
        일반적으로 준비상태의 프로세스 중 우선순위가 높은 프로세스가 CPU를 할당받음.
        인터럽트나 시스템 콜이 끝나면 ready상태로 돌아오는데, ready상태가 되었다고 바로 실행 되는 것은 아님.
      • 대기(waiting): 보류(block)라고 부르기도 한다.
        프로세스가 입출력 완료나, 시그널 수신 등 어떤 사건을 기다리고 있는 상태.
        상태가 끝나면 ready로 돌아간다.
      • 종료(terminated): 프로세스의 실행이 종료 되었다.
  • 프로세스 블럭(PCB: Process Control Block)

    • 프로세스에 대한 모든 정보가 모여있는 운영체제 커널의 자료구조.
    • 작업제어 블록(TCB:Task Control Block) 또는 작업 구조라고도 한다.
    • 수행 중인 프로세스를 나갈 때, 수행 중인 프로세스의 정보를 저장하여, 이후에 이 프로세스를 다시 시작 한다면 이전에 수행했던 다음부터 작업할 수 있도록 도와주는 저장 장소.
    • 프로세스의 상태, 번호(PID), CPU 레지스터 등 다양한 정보가 저장되어 있다.
      • 프로세스 식별자(Process ID)
      • 프로세스 상태(Process State)
      • 프로그램 계수기(Program Counter)
        프로세스가 다음에 실행할 명령어의 주소를 가리킴.
  • 프로세스 큐(Queue)

    • 프로세스가 여러 개의 작업을 진행할 때 순서를 기다리는 곳.
    • 준비 큐, 대기 큐, 실행 큐 등의 자료 구조가 있다.
      • Job Queue: 하드 디스크에 있는 프로그램이 실행되기 위해 메인 메모리의 할당 순서를 기다리는 큐.
      • Ready Queue: CPU 점유 순서를 기다리는 큐.
      • Device Queue: I/O를 하기 위한 각각의 여러 장치를 기다리는 큐가 그에 맞춰서 각각 존재함.
    • 각 큐 내부에 저장된 실제 데이터는, 각 프로세스의 PCB가 저장되어있다.
      프로세스의 실행 순서를 정해주는 알고리즘을 스케줄링(Scheduling) 이라고 한다.
  • 스레드(Thread)

    • 프로세스 내에서 실행되는 흐름의 단위.

    • 프로세스에 할당 된 메모리의 공간과 자원들을 공유하여 사용한다.
      따라서 스레드 활용 시, 자원의 효율성 증가의 효과를 볼 수 있지만 멀티스레드의 경우 동기화 문제에 신경을 써야한다.

      Code, Data, Heap영역을 공유. Stack영역은 따로 할당을 받는다.

      또, 각각의 스레드는 별도의 레지스터와 스택을 갖는다.

    • 일반적으로 한 프로세스는 하나의 스레드를 가지고 있지만, 환경에 따라 둘 이상의 스레드를 동시에 실행할 수 있다.
      이를 멀티 스레드(multithread)라고 한다.

      • 싱글 스레디드 프로그램 (단일 스레드):

        하나의 프로세스에 하나의 스레드를 할당 한 것.

      • 멀티 스레드:
        한 프로세스에 처리해야할 작업이 많을 때, 동시 처리 작업을 위해 생겼다.
        자원을 공유하여 생성과 관리의 중복성을 최소화하여 수행 능력을 향상 시킬 수 있다.
        이 때, 스레드들은 독립적인 작업을 위해 독립적인 스택, 스레드 ID, 프로그램 카운터, 레지스터 집합을 갖는다.

  • 프로세스와 스레드의 차이

    • 프로세스: 생성되며 메모리 공간 들을 복사하여 자원을 할당시킴.
      공장에 비유할 수 있음.
    • 스레드: 메모리 공간과 자원들을 공유한다.
      공장에서 일하는 일꾼으로 비유할 수 있음.
    • 자원 공유를 하는 특성 때문에, 프로세스 간의 통신보다 스레드 간의 통신 비용이 적게 들어가므로, 스레드 사용 시 작업들간의 통신 부담을 줄일 수 있다.

Todo

  • 미션 1, 2 완료!

  • 객체지향의 사실과 오해 읽기

느낀점

  • 이전에 공부를 해두었던 것이 나와서 내가 알고있는 개념을 한 번 더 정리하는 기회가 된 것 같아서 좋았던 것 같다.
    내가 정리한 부분과 내일 마스터클래스의 내용과 비교하여 좀 더 다듬어진 정보를 저장해야겠다!!
  • 미션 구현에 있어서 내가 원하던 결과를 얻지못해, 다른 방법으로 우회하여 해결 하였는데 이것이 좀 아쉬웠던 것 같다.
    이미 제출을 했지만, 금요일에 한 번 더 다듬어 봐야겠다!!
profile
노력

0개의 댓글