CS 스터디 운영체제 #1(장연)

민성재·2021년 4월 17일
0

Operation System

목록 보기
2/7

1. 프로그램 VS 프로세스 VS 스레드

프로그램 : 보조기억장치에 존재하는 실행파일
프로세스 : 메모리에 로드되어 실행중인 작업
스레드 : 프로세스 안에서 실행되는 작업 흐름 단위

  • 기본적으로 프로세스마다 최소 1개의 스레드를 보유하고 있다.
    프로세스 메모리
    메모리는 Code, Data, Heap, Stack 영역으로 구분되어 있다.
  • Code : 코드 자체를 구성하는 메모리 영역. 프로그램 명령이 위치하는 곳으로 기계어로 제어되는 메모리 영역

  • Data : 전역변수, 정적변수, 배열, 구조체 등이 저장. 프로그램이 실행될 때 생성되고 프로그램이 종료되면 시스템에 반환된다. 이때 초기화 된 데이터는 Data 영역에 저장되고 초기화 되지 않은 데이터는 BSS(Block Stated Symbol)영역에 저장된다.
    -> 초기화되지 않은 데이터는 RAM에 저장하여 메모리 저장 효율을 높인다.

  • Heap : 메모리를 동적할당 할 때 사용. 데이터를 저장하기 위해 malloc() 함수를 사용. 메모리 공간이 많다는 것이 장점이지만 포인터로 메모리영역을 접근해야 하기 때문에 읽고 쓰는것이 느리다는 단점이 있음.

  • Stack : 지역변수, 매개변수, 리턴 값, 돌아올 주소 등이 저장(잠시 사용되었다가 사라지는 데이터). 함수호출 시 생성되고 함수 종료시 시스템에 반환된다. 메커니즘은 LIFO(Last in First out)의 규칙을 따른다.

  • Code, Data,BSS 영역은 컴파일 시 크기가 결정되고 Heap, Stack 영역은 런타임시 크기가 결정된다.

  • Stack의 데이터들은 쉽게 저장되고 삭제되므로 데이터 용량이 불확실함. 따라서 stack은 밑에서부터 저장(메모리의 높은 주소에서 낮은 주소방향으로 할당), Heap은 위에서부터 저장하며(메모리의 낮은 주소에서 높은 주소방향으로 할당) 구분되어 저장된다.
    프로세스 & 스레드
    스레드 : 하나의 프로세스 내에서 실행되는 독립적인 일의 단위.

  • 프로세스는 각각 독립된 메모리 영역을 할당받는다.(프로세스끼리 메모리 공유 X)

  • 스레드는 프로세스 내에서 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유한다.(Stack을 제외한 Code, Data, Heap 영역 메모리 공유 O)
    -> 장점 : 스레드 간 데이터를 주고받는 것이 간단해지고 시스템 자원소모가 줄어들게 된다.
    -> 단점 : 자원공유의 문제가 발생할 수 있다.
    멀티 프로세스
    멀티 프로세스 : 하나의 응용프로그램을 여러개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 방법.

  • 장점 : 여러개의 프로세스 중 하나에 문제가 발생하여도 다른 프로세스에 영향을 주지 않는다.

  • 단점 : 프로세스 사이의 통신이 불편함(각각의 프로세스는 독립된 영역을 할당받기 때문)
    Context Switching 과정에서 오버헤드가 발생한다.(캐쉬에 있는 모든 데이터를 모두 리셋하고 다시 캐쉬정보를 불러와야 한다.)
    Context Switching : CPU에서 여러 프로세스를 돌아가면서 작업을 처리할 때 프로세스의 상태정보를 저장하고 복원하는 일련의 과정
    멀티 스레드
    멀티 스레드 : 하나의 응용프로그램을 여러개의 스레드로 구성하고 각 스레드로 하여금 하나의 작업을 처리하도록 하는 방법.

  • 장점 : 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리할 수 있다.
    스레드간 데이터를 주고받는 것이 간단해지고 시스템 자원소모가 줄어들어 시스템 처리량이 증가한다.
    Stack을 제외한 모든 메모리를 공유하기 때문에 통신의 부담이 적어 프로그램 응답시간을 단축시킨다.

  • 단점 : 자원 공유의 문제가 발생한다.(동기화 문제)
    하나의 스레드에 문제가 발생하면 전체 프로세스가 영향을 받는다(하나의 스레드가 데이터공간을 망가트리면 모든 스레드가 오류남)
    주의 깊은 설계가 필요하고 디버깅이 까다롭다.

profile
민성재 개발 블로그

0개의 댓글