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개의 댓글

관련 채용 정보