커널 영역 : PCB(프로세스 제어 블록)이라는 정보가 저장된다.
사용자 영역 : 실행중인 프로세스가 코드영역, 데이터 영역, 힙영역, 스택 영역으로 나뉘어 저장된다.
실행 가능한 명령어가 저장되는 공간, 텍스트 영역이라고도 부른다.
CPU가 읽소 실행할 명령어가 담겨 있기 때문제 쓰기가 금지되어 있는 읽기 전용(read-only)공간이다.
프로그램이 실행되는 동안 유지할 데이터가 저장되는 공간이다.
대표적으로 정적변수, 전역변수가 저장된다.
개발자가 직접 할당 가능한 저장 공간이다. 프로그램 실행 도중 비교적 자유롭게 할당하여 사용 가능한 메모리 공간이다.
다만, 힙 영역에 메모리 공간을 할당했다면 언젠가는 해당 공간을 반환해야 한다. 반환하지 않으면 메모리를 낭비하는 메모리 누수(memory leak)문제가 초래할 수 있다.
=> 이러한 문제를 해결하기 위해 프로그래밍 언어에서 자체적으로 사용되지 않는 힙영역 메모리를 해제하는 가비지 컬렉션(Garbage Collection)기능 제공한다.
일시적으로 사용할 값들이 저장되는 공간이다.
함수의 실행이 끝나면 사라지는 매개변수, 지역변수, 함수 복귀 주소 등이 스택 영역에 저장된다.
스택 트레이스(stack trace)란? : 특정 시점에 스택 영역에 저장된 함수 호출 정보를 말한다. => 스택 트레이스로 문제의 발생 지점을 추적할 수 있어서, 디버깅에 매우 유용하게 사용된다.
🔷 PCB란? : 운영체제가 메모리에 적재된 다수의 프로세스를 관리하려면 프로세스를 식별할 수 있는 커널 영역내의 정보가 필요하다. 이 정보가 프로세스 제어 블록(PCB-Process Control Block)이다.
PCB는 프로세스와 관련한 다양한 정보를 내포하는 구조체의 일종이다.
PCB에 담기는 정보는 대표적으로 프로세스 ID(PID)와, 프로세스가 실행과정에서 사용한 레지스터 값, 프로세스가 현재 어떤 상태인지 나타내는 프로세스 상태, 프로세스가 언제, 어떤 순서로 CPU를 할당받을지 나타내는 CPU스케줄링(우선순위)정도, 프로세스의 메모리상 적재 위치를 알 수 있는 메모리 관련 정보, 프로세스가 사용한 파일 및 입출력장치 관련 정보가 명시된다.
이때 여러 PCB들은 커널 내에 프로세스 테이블(process table)형태로 관리되는 경우가 많다.
프로세스가 실행된다 뜻?: 운영체제에 의해 CPU의 자원을 할당받았다는 말과 같다.
타이머 인터럽트(timer interrupt)란? : 프로세스의 CPU사용시간은 타이머 인터럽트에 의해 제한된다. 시간이 끝났음을 알리는 인터럽트이다.
문맥(context)이란?: 백업 대상이 되는 중간 정보, 프로세스의 수행을 재개하기 위해 기억해야 할 정보를 말한다.
🔷 문맥 교환(context switching)이란? : 프로세스 문맥은 해당 프로세스의 PCB에 명시된다. 인터럽트가 발생하면, 운영체제는 해당 프로세스의 PCB에 문맥을 백업한다. 그리고 실행할 프로세스의 문맥을 복구한다.
=> 기존 프로세스의 문맥을 PCB에 백업하고, PCB에서 문맥을 복구하여 새로운 프로세스를 실행 하는 것
프로세스 간에 너무 낮은 문맥 교환이 발생하면 캐시 미스가 발생할 가능성이 높아져 메모리로부터 실행할 프로세스의 내용을 가져오는 작업이 빈번해지고, 이는 큰 오버헤드로 이어질 수 있다.
🔷 프로세스 상태: 운영체제는 PCB를 통해 프로세스와 상태를 인식하고 관리한다.
대표적인 상태로는 생성(new), 준비(ready), 실행(running), 대기(blocked), 종료(terminated) 등이 있다.
🔷 멀티프로세스: 동시에 여러 프로세스가 실행되는 것
🔷 멀티스레드: 프로세스를 동시에 실행하는 여러 스레드를 말한다.
프로세스 간 통신(IPC- Inter Process Communication) 2가지 방식
공유 메모리(shared memory): 프로세스 간에 공유하는 메모리 영역을 토대로 데이터를 주고 받는 통신 방식을 말한다. 공유 메모리라는 특별한 메모리 공간을 할당하면 프로세스가 해당 메모리 공간을 공유하여 읽고 쓸수 있게 된다.
메시지 전달: 프로세스 간에 주고받을 데이터가 커널을 거쳐 송수신되는 통신 방식이다.
메시지 전달 기반 IPC를 위한 대표적인 수단: 파이프, 시그널, 소켓, 원격 프로시적 호출(RPC)등이 있다.