❓ 프로그램에 대해 설명해주세요
💭 프로그램의 사전적 의미는 진행 계획이나 순서를 말하고 컴퓨터에서 프로그램이란 어떤 문제를 해결하기 위해 컴퓨터에게 주어지는 처리 방법과 순서를 기술한 명령문 집합입니다.
❓ 프로세스에 대해 설명해주세요
💭 프로그램을 메모리에 적재하고 실행하는 순간 프로그램은 프로세스가 됩니다.
❓ 프로세스의 메모리 공간에 대해 설명해주세요
💭 프로세스의 메모리 공간은 실행할 수 있는 코드로 이루어진 명령어를 저장하는 코드영역, 프로그램이 실행되는 동안 유지할 데이터를 저장하는 데이터영역, 프로그래머가 직접 할당할 수 있는 저장공간인 힙 영역, 데이터를 일시적으로 저장하는 공간인 스택 영역으로 나누어져 있습니다.
코드영역과 데이터 영역은 크기가 고정된 정적 할당 영역이라 할 수 있으며, 힙 영역과 스택 영역은 크기가 가변적인 동적 할당 영역이라고 할 수 있습니다.
❓ 쓰레드에 대해 설명해주세요
💭 쓰레드는 프로세스를 구성하는 실행 흐름의 단위입니다.
❓ 프로세스와 쓰레드가 어떤차이가 있는지 예시를 들어 설명해주세요
💭 제가 즐겨하는 게임인 롤로 예시를 들자면 실행 프로그램인 롤을 실행하면 프로세스가 되고 실행중인 롤을 동작하기 위해 실행되는 일인 화면출력, 조작,사운드 출력 등이 쓰레드입니다.
❓ 쓰레드의 메모리 공간에 대해 설명해주세요
💭 쓰레드의 메모리 공간은 스택,코드,데이터,힙으로 나누어서 설명이 가능합니다. 쓰레드는 프로세스내에서 각각 스택만 할당받고 프로세스 내에 있는 자원인 코드, 데이터, 힙을 공유하여 사용합니다.
❓ PCB에 대해 설명해주세요
💭 PCB는 프로세스 제어 블록으로 빠르게 번갈아가면 수행되는 프로세스를 관리하기 위해 사용되는 자료구조 입니다.
(프로세스 관련 정보를 저장하는데 프로세스ID, 레지스터 값, 프로세스 상태, 스케줄링 정보, 메모리 정보, 사용한 파일과 입출력장치 정보가 들어가 있습니다. 프로세스 생성 시 커널 영역에 생성되고 종료시 폐기됩니다.)
❓ TCB에 대해 설명해주세요
💭 스레드 제어블록은 프로세스가 커널의 PCB에 저장된다면 스레드의 정보는 TCB에 저장됩니다. 즉 TCB는 스레드에 대한 정보를 담고 있는 자료구조입니다.
❓ 멀티 프로세스에 대해서 설명해주세요
💭 단일 스레드 프로세스가 여러개 있는 것이 멀티 프로세스입니다.
❓ 멀티 쓰레싱에 대해서 설명해주세요
💭 하나의 프로세스를 여러 쓰레드로 실행하는 것이 멀티 쓰레드입니다.
❓ 멀티 프로세스와 멀티 쓰레드 비교해서 설명해주세요
💭 멀티 프로세스를 위해 프로세스를 fork하면 모든 자원이 복제되어 저장되는데 저장된 메모리 주소를 제외하면 모든 것이 동일한 프로세스가 통째로 메모리에 적재됩니다. 이는 메모리를 많이 차지한다는 뜻으로 효율적이지 못합니다. 하지만 멀티 쓰레싱은 쓰레드들이 각각의 스택만 가질뿐 나머지는 프로세스가 가지는 자원을 공유하기 때문에 메모리 부분에서 더 효율적이며 자원을 공유하기때문에 협력과 통신에 유리하다는 장점이 있습니다.
❓ 프로세스 수행 상태 변화 과정에 대해 설명해주세요
💭 첫번째로 프로세스는 메모리에 적재되어 PCB를 할당받은 상태인 생성상태로 들어갑니다.
프로세스는 준비상태에서 CPU를 할당받기 위해 기다리고
차례가 오면 CPU를 할당받아 실행 상태로 들어갑니다. 할당된 시간을 모두 사용시 준비상태로 돌아거나 실행 도중 입출력 장치를 사용하면 입출력 작업이 끝날 때 까지 대기상태로 들어갑니다.
입출력 작업이 끝나면 준비상태로 돌아가고 모든 작업이 끝나면 PCB,프로세스의 메모리 영역을 정리하고 종료 상태가 됩니다.
❓ 문맥 교환에 대해 설명해주세요
💭 기존 프로세스의 문맥을 PCB에 백업하고, 새로운 프로세스를 실행하기 위한 문맥을 PCB로 부터 복구하여 새로운 프로세스를 실행하는 것입니다.
❓ fork 명령어에 대해 설명해주세요
💭 자기 자신 프로세스의 복사본을 자식 프로세스로 생성하는 시스템 콜입니다.
❓ 프로세스 끼리 협력하는 방법에 대해서 설명해주세요
💭 프로세스 간 자원을 공유하고 데이터를 주고받는 것을 프로세스 간 통신(IPC)이라고 하며,방법에는 공유 메모리, 파이프 등이 있습니다. 간단하게 공유 메모리는 서로 공유하는 메모리 영역을 두어 데이터를 공유하는 것을 말하고, 파이프는 통신을 위한 메모리 공간인 버퍼를 생성하여 데이터를 주고 받습니다.