
실행 중인 프로그램에 대한 운영체제의 추상화.
쉽게 말해서 실행 중인 프로그램을 의미한다.
즉, 우리가 코드로 작성한 프로그램(파일)이 운영체제에 의해 실행 되는 순간 "프로세스"가 된다 !!
예를 들어, hello 프로그램이 실행되면 하나의 프로세스가 생성됨
- 각 프로세스는 독립적으로 실행되는 것처럼 보임.
- CPU, 메모리, 입출력 장치를 독점하는 것처럼 보이지만, 실제로는 운영체제가 여러 프로세스를 동시에 실행하도록 스케줄링함.
- 한 프로세스가 실행될 때, 다른 프로세스의 실행을 방해하지 않고 순차적으로 실행되는 것처럼 보이는 "환상"을 줌.
- 이 환상 덕분에 개발자는 복잡한 동시 실행을 신경 쓰지 않고 프로그램을 만들 수 있음.
📌 운영체제는 여러 개의 프로세스를 동시에 실행할 수 있도록 관리.
- 과거에는 한 번에 하나의 프로그램만 실행 가능했지만, 멀티코어 프로세서 덕분에 여러 프로그램을 동시에 실행 가능
- 하지만, CPU의 개수보다 많은 프로세스가 실행될 수 있음
- 이런 경우, 운영체제는 문맥 전환(Context Switching) 기법을 사용해서 프로세스를 번갈아 실행함.]
📌 문맥 전환이란?
- CPU가 현재 실행 중인 프로세스를 멈추고, 다른 프로세스로 전환하는 과정
- 운영체제가 프로세스 A를 중단하고, 프로세스 B를 실행할 때 "문맥(Context)"을 저장하고 복구해야 함.
- 문맥(Context)에는 CPU 레지스터 값, 메모리 상태, 프로그램 카운터(PC) 등 실행 정보가 포함됨.
📌 문맥 전환 과정
- 실행 중인 프로세스의 상태(레지스터, PC, 메모리 정보)를 저장
- 새로운 프로세스의 상태를 불러옴
- CPU가 새로운 프로세스를 실행
📌 문맥 전환의 핵심 포인트
- CPU가 한 번에 하나의 프로세스만 실행할 수 있기 때문에 필요함.
- 너무 자주 발생하면 성능이 저하될 수 있음.
- 멀티태스킹이 가능해 보이는 이유가 바로 문맥 전환 덕분
그림 1.12 분석 (프로세스 문맥 전환)
- 처음에 Process A가 실행중
- 디스크 입출력 요청이 발생하면 CPU가 Process A를 멈추고, Process B로 전환
- 디스크에서 데이터가 읽혀지면, 다시 Process A로 복귀
- 이 과정에서 운영체제는 Context Switching(문맥 전환)을 수행하여 각 프로세스의 상태를 저장하고 불러옴
📌 운영체제는 문맥 전환을 어떻게 관리할까?
- 운영체제의 핵심 부분인 커널(Kernel)이 문맥 전환을 수행
- 커널은 프로세스를 관리하는 운영체제의 중심 코드
- 응용 프로그램(예: hello)이 운영체제의 기능을 요청하면 시스템 콜(System Call)을 통해 커널이 처리
📌 시스템 콜(System Call)이란?
- 프로세스가 운영체제의 기능을 사용하려면, 직접 하드웨어를 제어할 수 없으므로 운영체제에 요청해야 함
- 이 요청을 수행하는 것이 시스템 콜(System Call)
- 예를 들어, printf()를 실행하면 내부적으로 운영체제의 write() 시스템 콜을 호출하여 출력 장치(모니터)에 글자를 표시
📌 운영체제는 커널 모드에서 실행됨
- 커널(Kernel)은 운영체제의 핵심 부분이기 때문에, 일반 프로그램과 분리되어 실행됨.
- 일반 프로그램은 유저 모드(User Mode)에서 실행되며, 커널이 제공하는 기능을 사용할 때만 커널 모드(Kernel Mode)로 전환
✔ 프로세스(Process)는 실행 중인 프로그램을 의미하며, 운영체제는 여러 개의 프로세스를 동시에 실행할 수 있도록 관리함.
✔ 동시 실행(Concurrency)은 문맥 전환(Context Switching)을 통해 이루어지며, 한정된 CPU 자원을 효율적으로 활용하기 위해 필요함.
✔ 운영체제는 문맥 전환(Context Switching)을 통해 여러 프로세스를 빠르게 번갈아 실행함.
✔ 커널(Kernel)은 운영체제의 핵심 부분이며, 시스템 콜(System Call)을 통해 프로세스가 운영체제의 기능을 사용할 수 있음.