-
[운영체제] 프로세스와 스레드운영체제 2024. 8. 2. 20:40
이 글은 단지 공부 목적으로 작성 된 글 입니다
프로세스
우선 프로세스를 이해 하려면 프로그램 이란 것을 알아야 한다
프로그램이란?
-> 프로그램은 각 운영체제에서 mac(.dmg파일), window(.exe파일) 과 같은 컴퓨터에서 실행 할 수 있는 파일을 말한다
저 파일을 실행하지 않은 상태가 프로그램 이라고 부른다
프로그램을 개발 하려면 프로그래밍 언어로 코딩 해서 만든다
이러한 실행 하지 않은 상태를 가지고 있는 프로그램을 그저 코드 덩어리 라고 보면 된다
이러한 프로그램을 실행 시켜 동적으로 변해서 프로그램이 돌아가고 있는 상태가 프로세스이다
즉, 컴퓨터에서 작업 중인 프로그램을 의미 한다
이제 우리가 컴퓨터에서 뭐 잘 안될때 작업 관리자를 들어가곤 한다
작업 관리자에서는 현재 실행중인 프로그램
즉, 프로세스 목록들이 존재한다고 보면 된다
프로그램이 프로세스로 변화 하는 과정
- 프로그램은 실행되기 위해선 운영체제가 메모리 공간을 할당해 줘야 한다
- 프로그램을 실행하는 순간 파일은 컴퓨터 메모리에 올라가고
- 운영체제로 부터 시스템 자원 CPU 할당 받아서 그 안에 있는 프로그램 코드를 실행 시켜 동작 하게 된다
과거에는 프로그램을 실행할 때 프로세스 하나만을 사용했다
하지만 발전과 프로그램의 복잡도가 높아져서 프로세스 하나만을 사용해서 프로그램을 실행하기에는 한계가 있다
그래서 이러한 프로세스 특성의 한계를 해결하기 위해 탄생한 친구가 스레드이다
스레드
- 하나의 프로세스 내에서 동시에 진행되는 작업 갈래, 흐름의 단위
- 하나의 프로세스 안에서 여러가지 작업들 흐름이 동시에 진행된다 이러한 일련의 작업 흐름들을 스레드라고 하고 여러개가 있다면 멀티 스레드라고 한다
- 즉, 하나의 프로세스 안에 여러개의 스레드들이 들어 있다고 보면 된다
프로세스 & 스레드 메모리
프로세스 자원 구조
프로세스가 생성이 되면 4가지의 메모리 영역으로 구성되어 할당 받게 된다
- Code / Text 영역 : 작성된 코드의 함수들이 CPU가 해석 가능한 기계어 형태로 저장되어 있다
- Data 영역 : 코드가 실행되면서 전역 변수나 데이터들이 모여 있음
- Stack 영역 : 함수에서 지역 변수는 함수가 종료되면 되돌아올 임시 적인 자료를 저장하는 독립적인 공간
- 즉, 함수의 호출과 함께 할당되고 함수의 호출이 완료되면 소멸한다
- 여기에서 Stack영역이 초과하면 stack over flow 가 발생된다 ex) 재귀 함수에서 많이 일어남.......
- Heap 영역 : 생성자나 인스턴스와 같은 동적으로 할당 되는 데이터들을 위해 존재하는 공간
- 즉, 사용자에 의해 메모리 공간이 동적으로 할당되고 해제됨
스레드의 자원 공유
- 스레드는 프로세스가 할당 받은 자원을 이용하는 실행의 단위
- 스레드는 각각의 독립된 stack 공간이 있고 프로세스안에서의 스레드끼리 code, data, heap 공간을 공유한다
그럼 왜 stack 공간만 이렇게 각각의 스레드안에 있을까?
- 그 이유는 stack 이라는 공간의 특성 때문인데
- stack 은 함수 에서의 일어나는 동작이나 ,선언하는 지역변수 등을 저장하는 메모리 공간이기 때문이고 해당 함수가 끝마치면 그 stack 공간도 소멸한다
- 즉, 독립적인 함수 호출이 가능하다 라는 의미이다
- 독립적인 실행 흐름이 추가 된다는 말이다
이렇게 구성된 이유는 하나의 프로세스를 다수의 실행 단위인 스레드로 구분하여 자원을 공유하고 자원의 생성과 관리의 중복성을 최소화하여 수행 능력을 올리기 위해서다
프로세스의 자원 공유
- 각각의 프로세스는 메모리에 별도의 주소 공간에서 실행
- 그래서 다른 프로세스의 변수나 자료구조에 접근 할 수 없다
하지만 특별한 방법으로 프로세스가 다른 프로세스의 정보에 접근 할 수 있다
- IPC 사용 -> 독립적인 공간을 가진 프로세스 간 통신에 사용되는 기법
- LPC 사용 -> 프로세스가 다른 프로세스와 정보를 주고 받을 때 빠른 속도로 데이터를 교환하는 것
- 별도로 공유 메모리를 만들어서 정보를 주고 받도록 설정
단순하게 CPU 레지스터 교체와 RAM과 CPU 사이의 캐시 메모리 까지 초기화 해서 자원 부담이 크다
그래서 다중 작업을 할때 스레드를 이용하는 것이 효율적이다
현재에는 이러한 이유로 다중 스레딩을 기본으로 하고 있다
프로세스 & 스레드의 동시 실행 원리
- CPU 한개에는 여러개의 코어가 있따
- 코어는 CPU 코어 유닛이다
- 예를들어 4코어 8쓰레드라고 한다고 하면
- 물리적 코어가 4개 논리적 코어가 8개라는 뜻이고
- 하나의 코어가 2개이상 쓰레드를 실행 가능하다는 의미이다
- 이것을 하이퍼 스레딩 기술이라 한다
하지만 우리는 컴퓨터 프로그램을 훨씬 많이 켜 놓고 실행한다
그럼 여기에서 8개의 논리적인 코어, 즉 스레드는 이렇게 많은 프로그램을 실행할 때 어떻게 처리 할까?
CPU의 작업 처리 방식
병렬성
- 직관적으로 명령어를 메모리에서 뽑아 해석하고 실행하는 반도체 유닛인 여러개의 코어에 맞춰 여러개의 프로세스, 스레드를 돌려 병렬로 작업들을 동시 수행하는 것
동시성
- 둘 이상의 작업이 동시에 실행되는 것
- 위에서 병렬성은 물리적으로 동시에 실행하는 것이라고 하면 동시성은 동시에 실행하는 것처럼 보이게 하는 것이다
- 한개의 코어가 여러가지 작업을 계속 번갈아가면서 조금씩 처리
- 마치 프로그램이 동시에 실행되는 것 처럼 보인다
- 이렇게 작업들을 나누어서 조금씩 만 작업을 수행하고 다음 작업으로 넘겨 가서 동작 하는 방식을 Context Switching이라 한다
참고/인용
👩💻 완전히 정복하는 프로세스 vs 스레드 개념
한눈에 이해하는 프로세스 & 스레드 개념 전공 지식 없이 컴퓨터의 프로그램을 이용하는데는 문제 없어 왔지만 소프트웨어를 개발하는 사람으로서 컴퓨터 실행 내부 요소를 따져보게 될때, 아
inpa.tistory.com
'운영체제' 카테고리의 다른 글
[운영체제] 뮤텍스(Mutex)와 세마포어 (Semaphore) (0) 2024.09.21 [운영체제] 메모리란? (0) 2024.06.19 [운영체제] PCB는 어떤 녀석일까? (0) 2024.05.17