프로세스
- 운영체제로부터 시스템 자원을 할당받는 작업의 단위로, 실행을 위해 메모리로 올라온 프로그램
- 프로세스는 각각의 독립된 메모리 영역을 할당받고, 별도의 주소 공간에서 실행된다.
- 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없으며, 다른 프로세스의 자원에 접근하려면 프로세스 간 통신을 이용해야 한다.
메모리 구조
코드 영역 | - 프로그램의 코드가 저장되는 곳으로, 텍스트 영역이라고도 한다. - 프로그래머가 작성한 프로그램은 코드 영역에 탑재되며, 읽기 전용으로 처리된다. |
데이터 영역 | - 코드가 실행하면서 사용하는 변수나 파일 등 각종 데이터를 저장한다. - 데이터는 변하는 값이기 때문에 기본적으로 읽기와 쓰기 모두 가능하다. |
스택 영역 | - 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸된다. - 함수의 호출과 관계되는 매개변수, 복귀 주소, 지역변수와 같은 임시자료가 저장된다. |
힙 영역 | - 사용자가 직접 관리해야 하는 메모리 영역으로, 사용자에 의해 메모리 공간이 동적으로 할당되고 해제된다. - 할당할 메모리의 크기를 프로그램이 실행되는 동안 결정해야 하는 경우 사용되는 공간 |
스레드
- 한 프로세스 내에서 동작하는 여러 실행의 흐름으로, 프로세스 내의 주소 공간이나 자원들을 같은 프로세스 내 스레드끼리 공유할 수 있다.
- 스레드는 프로세스 내에서 레지스터와 스택 영역만 따로 할당받고 정적 영역인 코드, 데이터 영역과 동적 영역인 힙 영역을 공유함으로써 자원의 낭비를 막고 효율성을 향상시킨다.
프로세스 VS 스레드
- 프로세스가 생성되면 CPU 스케줄러는 프로세스가 해야할 일을 CPU에 전달하는데, 이때 CPU에 전달하는 일 하나가 스레드이다.
- 즉, 프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이고, 스레드는 프로세스의 코드에 정의된 절차에 따라 CPU에 작업 요청을 하는 실행 단위이다.
멀티 스레드
- 프로세스 내 작업을 여러 개의 스레드로 분할함으로써 자원을 공유하며 작업을 나누어 수행하는 것
장점
- 프로세스 내 공유가 가능한 부분을 제외하고 실행과 관련된 부분을 스레드로 나누어 관리하면 자원의 낭비를 막을 수 있다.
- 스레드 간에 전역변수나 힙 영역을 이용하여 데이터를 주고받기 때문에, 프로세스 간 통신에 비해 스레드 간의 통신이 더 간단하다.
- 문맥교환 시 스레드는 캐시 메모리를 비울 필요가 없고 스택 영역만 처리하면 되기 때문에, 프로세스 간의 전환 속도보다 스레드 간의 전환 속도가 빠르다.
문제점
- 서로 다른 스레드가 데이터와 힙 영역을 공유하므로, 어떤 스레드가 다른 스레드에서 사용 중인 변수나 자료구조에 접근하여 엉뚱한 값을 읽어오거나 수정해버릴 수 있다. → 동기화 작업 필요
- 동기화를 통해 작업 처리순서와 공유 자원에 대한 접근을 컨트롤할 경우, 병목현상이 발생하여 성능이 저하될 가능성이 높다.
- 오류로 인해 하나의 스레드가 종료되면 전체 스레드가 종료된다.
멀티스레드 모델
사용자 수준 스레드
- 커널이 지원하는 스케줄링이나 동기화 같은 기능을 대신 구현해주는 라이브러리를 통해 구현하는 일반적인 스레드
- 사용자 프로세스 내에 여러 개의 스레드가 존재하지만 커널의 스레드 하나와 연결되기 때문에 1 to N 모델이라고 한다.
- 사용자 스레드는 문맥교환과 같은 부가적인 작업이 줄어들어 속도가 빠르지만, 커널 스레드가 입출력 작업을 위해 대기 상태에 들어가면 모든 사용자 스레드가 같이 대기해야 한다.
- 또한, 한 프로세스의 타임 슬라이스를 여러 스레드가 공유하기 때문에 여러 개의 CPU를 동시에 사용할 수 없고 보안에 취약하다.
커널 수준 스레드
- 커널이 멀티스레드를 지원하는 방식으로, 하나의 사용자 스레드가 하나의 커널 스레드와 연결된다.
- 커널 스레드는 독립적으로 스케줄링 되므로, 특정 스레드가 대기 상태에 들어가도 다른 스레드는 작업을 계속할 수 있다.
- 커널 레벨에서 모든 작업을 지원하기 때문에 멀티 CPU를 사용할 수 있지만, 문맥교환 시 오버헤드 때문에 느리게 작동한다.
'Computer Science > Operating System' 카테고리의 다른 글
CPU 스케줄링 (0) | 2022.03.15 |
---|---|
프로세스 제어 블록과 문맥교환 (0) | 2022.03.15 |
병렬 처리 (0) | 2022.03.15 |
컴퓨터 성능 향상 기술 (0) | 2022.03.14 |
컴퓨터 구조 (0) | 2022.03.14 |