프로세스 (Process)는 컴퓨터에서 실행되고 있는 프로그램을 말하며 CPU 스케줄링의 대상이 되는 작업(task),
HDD/SDD(디스크)에 있는 프로그램이 메모리 프로세스가 되고 이것을 인스턴스화라고 함 그리고 CPU 스케줄러에 의해 CPU가 프로세스를 실행함
ex : 구글프로그램 (chrome.exe)과 같은 실행파일을 두번 클릭하면 구글 크롬 프로세스가 시작되는것을 말함
스레드 :프로세스 내 작업의 흐름을 지칭
프로세스의 상태
new : 생성상태(create) 프로세스가 생성된 상태를 의미 fork() 또는 exec() 함수를 통해 생성함, 이때 PCB가 할당됨
Ready(대기상태) : 메모리 공간이 충분하면 메모리를 할당받고 아니면 아닌 상태로 대기 하고 있으며 CPI 스케줄러로부터 CPU 소유권이 넘어오기를 기다리는 상태
ready suspended(대기중단상태) : 메모리 부족으로 일시 중단된 상태
running(실행상태) : CPU 소유권과 메모리를 할당받고 인스트럭션을 수행 중인 상태를 의미 -> CPU burst가 났다고도 표현
block(중단상태) : 어떤 이벤트가 발생한 이후 기다리며 프로세스가 차단된 상태, 대표적으로 I/O 이런 현상이 많이 발생 예를 들면 프린트 인쇄 버튼을 눌렀을때 프로세스가 잠깐 멈춘 듯한 느낌
blocked suspended(일시 중단상태) : 대기 중단과 유사 중단된 상태에서 프로세스가 실행되려고 했지만 메모리 부족으로 일시 중단
terminated(종료상태) : 메모리와 CPU 소유권을 모두 놓고 가는 상태, 종료는 자연스럽게 종료되는 것도 있지만 부모 프로세스가 자식 프로세스를 강제 시키는 비자발적 종료(abort)도 있음 , 자식 프로세스에 할당된 하자원의 한계치를 넘어서거나 부모 프로세스가 종료되거나 사용자가 process.kill 등 여러 명령어로 프로세스를 종료
fork()는 부모 프로세스의 주소공간을 복사하며 , 새로운 자식 프로세스를 생성하는 함수 주소 공간만 복사할 뿐 부모 프로세스의 비동기 작업 등을 상속하지않음
exce()은 새롭게 프로세스를 생성하는 함수
프로세스의 메모리 구조
스택 : 지역변수 , 매개변수, 함수가 저장되고 컴파일 시에 크기가 결정되며 도적인 특징을 갖음 스택영역은 함수가 함수를 재귀적으로 호출하면서 동적으로 크기가 늘어날수 있음
힙 : 힙은 동적 할당할 때 사용되며 런타임 시 크기가 결정됨 ,예를들어 벡터같은 동적 배열은 당연히 힙에 동적 할당됨, 힙은 동적인 특징을 가징
데이터 영역 : 전역변수, 정적변수가 저장되고, 정적인 특징을 갖는 프로그램이 종료되면 사라지는 변수가 들어 있는 영역
데이터 영역은 BSS영역과 Data영역으로 나뉨, Bss 영역은 초기화가 되지 않은 변수가 0으로 초기화되며, Data 영역(Data segment)은 0이 아닌 다른 값으로 할당된 변수들이 저장됨
코드 영역 : 코드 영역은 프로그램에 내장되어 있는 소스 코드가 들어가는 영역입니다. 이 영역은 수정 불가능한 기계어로 저장되어 있으며 정적인 특징을 가짐
동적영역 : 스택&힙
정적영역 : 코드영역 ,데이터영역
PCB(Process Control Blcok) :OS에서 프로세스에 대한 메타데이터를 저장한 데이터를 말함 프로세스 제어 블록이라고도 하며 프로세스가 생성되면 운영체제는 해당 PCB를 생성 프로그램이 실행되면 프로세스가 생성되고 프로세스 주소 값들에 앞서 설명한 스택, 힙 등의 구조를 기반으로 메모리가 할당됨, 이프로세스의 메타데이터들이 PCB에 저장되어 관리됨
메타데이터 : 데이터에 관한 구조화된 데이터이자 데이터를 설명하는 작은 데이터, 대량의 정보 가운데에서 찾고 있는 정보를 효율적으로 찾아내서 이용하기 위해 일정한 규칙에 따라 콘텐츠에 대해 부여되는 데이터
PCB구조 :
프로세스 스케줄링 상태 : 준비 , 일시중단 프로세스가 CPU에 대한 소유권을 얻은 이후 또는 이후 경과된 시간과 같은 기타 스케줄링 정보
프로세스 ID : 프로세스 ID, 해당 프로세스의자식 프로세스 ID
프로세스 권한 : 컴퓨터 자원 또는 I/O 디바이스에 대한 궎한 정보
프로그램 카운터 : 프로세스에서 실행해야 할 다음 명령어의 주소에 대한 포인터
CPU 레지스터 : 프로세스를 실행하기 위해 저장해야 할 레지스터에 대한 정보
CPU 스케줄링 정보 : CPU 스케줄러에 의해 중단된 시간 등에 대한 정보
계정 저보 : 프로세스 실행에 사용된 CPU 사용량, 실행한 유저의 정보
I/O 상태 정보 : 프로세스에 할당된 I/O 디바이스 목록
컨텍스트 스위칭 : PCB를 교환하는 과정을 말함 -> 한프로세스에서 할당된 시간이 끝나거나 인터럽트에 의해 발생
한개의 프로세스 A가 실행하다 멈추고 , 프로세스 A의 PCB를 저장한후 다시 프로세스 B를 로드하여 실행
다시 프로세스 B의 PCB를 저장하고 프로세스A의 PCB를 로드함 , 이때 컨텍스트 스위칭이 일어날 때 앞의 그림처럼 유휴 시간(idle time)이 발생
멀티 프로세싱 : 여러개의 프로세스, 즉 멀티프로세스를 통해 동시에 두가지 이상의 일을 수행할 수 있는 것을 말함 ,이를 통해 하나 이상의 일을 병렬로 처리할 수 있으며 특정 프로세스의 메모리, 프로세스 중 일부에 문제가 발생되더라도 다른 프로세스를 이용 해서 처리할 수 있으므로 신뢰성이 높은 강점이 있다.
IPC(Inter process Communication) : 프로세스끼리 데이터를 주고받고 공유 데이터를 관리하는 매커니즘
공유 메모리(shared memory)는 여러 프로세스에 동일한 메모리 블록에 대한 접근 권한이 부여되어 프로세스가 서로 통신할 수 있도록 공유 버퍼를 생성하는 것을 말함,
위에 그림처럼 일반적으로 여러 개의 프로세스는
각각의 메모리를 독립적으로 사용합니다.
하지만 공유 메모리의 경우는 여러개의 프로세스가
하나의 메모리 영역을 사용하는 것을 알 수 가 있습니다.
그렇다면 공유메모리는 어떻게 사용 될까요?
공유메모리가 사용되는 영역은 크게 하드웨어적인 부분과,
소프트웨어적인 부분으로 나눌 수 있습니다.
먼저 하드웨어 에서의 공유메모리를 살펴보겠습니다.
컴퓨터 하드웨어에서 공유메모리는 일반적으로
멀티프로세서 시스템에서 여러 개의 CPU 가 공통적으로
접근 가능한 RAM 의 영역을 의미합니다.
이러한 공유메모리 시스템은 여러개의 CPU 가 쉽게 하나의 View를 공유 할 수 있고,
데이터를 사용할 때 매우 빠르게 메모리의 접근할 수가 있습니다.
그러나 동시에 많은 CPU가 접근 함으로 인해, 복잡한 문제도 발생합니다.
캐시 일관성(Cache Coherence) 문제가 대표적인 문제점이라고 할 수 있습니다.
캐시 일관성 문제란 각 클라이언트 PC 가 자신만의 로컬 캐시(Cache)를 가지고 있을때,
공유 메모리를 사용할 때 마다,
다른 PC의 캐시와 공유 메모리의 데이터가 불일치하는 문제점을 말합니다.
기본적으로 각 프로세스의 메모리를 다른 프로세스가 접근할 수 없지만 공유 메모리를 통해 여러 프로세스가 하나의 메모리를 공유할 수 있다. IPC 방식 중 어떠한 매개체를 통해 데이터를 주고받는 것이 아닌 메모리 자체를 공유하기 때문에 불필요한 데이터 복사의 오버헤드가 발생하지 않아 가장 빠르고 같은 메모리 영역을 여러 프로세스가 공유 하기 때문에 동기화가 필요함,
참고로 하드웨어 관점에서 공유 메모리는 CPU가 접근할 수 있는 큰 랜덤 접근 메모리인 RAM을 가리키기도 함
'Computer Science > 운영체제' 카테고리의 다른 글
스레드 & 멀티스레드, 공유자원 (0) | 2022.06.24 |
---|---|
메모리 (0) | 2022.06.03 |