이 주제는 기술면접으로 자주 나오기도 하고 운영체제의 기본이기 때문에 공부할 필요가 있다.
우선 프로세스와 스레드의 차이를 알아보기 전에 프로세스와 스레드가 무엇인지 알아야한다.
프로세스: 운영체제로부터 자원을 할당받은 작업의 단위
스레드: 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위
이를 더 쉽게 이해하려면 프로그램까지 함께 이해하면 좋다.
프로그램 → 프로세스 → 스레드
프로그램은 파일이 저장 장치에 저장되어 있지만 메모리에는 올라가지 않은 정적인 상태이다.
이는 쉽게 말해 실행되지 않은 한 덩어리의 코드 상태라는 것이다.
이 프로그램을 실행시킨다는 것은 해당 파일이 컴퓨터 메모리에 올라간다는 것이고 이를 동적인 상태 라고 한다. 이를 뒷받침하듯 위키피디아에서는 프로세스의 정의를 “실행되고 있는 컴퓨터 프로그램” 라고 내리고 있다.
그렇다면 스레드는 무엇일까?
과거에는 프로그램을 실행할 때, 한 개의 프로세스로 해결했다고 한다. 하지만 시간이 흐름에 따라 더 복잡하고 정교한 작업이 필요했고, 운영체제의 특성상 프로세스를 늘릴 수 없었던 터라, 프로세스와는 다른 더 작은 실행 단위인 스레드가 탄생하게 되었다.
스레드는 프로세스의 한계를 해결하기 위해 만들어진 개념이기 때문에 프로세스와 다르게 스레드 간 메모리를 공유하며 작동한다. 스레드끼리 해당 프로세스의 자원을 공유하면서 프로세스 흐름의 일부가 되는 것이다. 스레드를 코드로 비유하면 코드 안의 함수들이라고 볼 수 있겠다.

프로세스들이 운영체제로부터 별도의 메모리 영역을 할당받은 모습
출처: Heee's Development Blog

스레드끼리 프로세스의 Code/Data/Heap 메모리 영역을 공유하는 모습
출처: Heee's Development Blog
Context Switching이 발생하는 주요한 인터럽트 요청들은 다음과 같다
Timer Interrupt (타임 슬라이스 만료)
일정 시간 동안 CPU를 사용한 후, 운영체제는 CPU를 다른 프로세스에 할당하기 위해 인터럽트를 발생시키고 Context Switching을 수행한다.
I/O Interrupt (입출력 요청 완료 또는 대기)
프로세스가 I/O 작업(디스크, 네트워크 등)을 요청하거나 완료하면 CPU가 다른 프로세스로 넘어가야 하므로 Context Switching이 발생한다.
System Call (시스템 호출)
사용자 프로그램이 커널 서비스를 요청하면 Context Switching이 될 수 있다. 예를 들어, 파일 요청, 프로세스 생성 등이 있다.
프로세스 생성 및 종료 (Fork, Exit)
새 프로세스가 생성되거나 기존 프로세스가 종료되는 경우에도 Context Switching이 필요하다.
외부 이벤트 발생
하드웨어 인터럽트, 긴급 상황 발생 등으로 CPU가 즉시 처리할 작업이 바뀔 때 발생한다.
Context Switching은 여러 프로세스가 마치 동시에 일어나는 듯이 보이게 해주며, CPU 자원을 효율적으로 공유하는 데 필수적이지만, 남용하면 CPU 성능이 저하될 수도 있다.
→ 정확한 기준은 시스템 환경, OS, 하드웨어에 따라 다르나 초당 수백 ~ 천여 회 이상의 빈도가 위험 신호이다.
CPU 스케줄링 알고리즘은 CPU core의 개수가 한정적일 때 운영체제가 여러 프로세스 중 어떤 프로세스에 CPU를 언제 할당할지 결정하는 규칙을 말한다.
효율적인 CPU 사용과 공정한 작업 분배, 응답 속도 향상 등을 목표로 한다.
운영체제는프로세스와 스레드를 효율적으로 관리하며, CPU가 여러 작업을 돌아가며 처리할 수 있도록 Context Switching을 수행한다.
스케줄링 알고리즘을 통해 실행 순서와 시간을 정하고, 시스템 효율성과 반응성을 높인다.
→ 이 세 가지 개념은 현대 컴퓨팅의 멀티태스킹과 자원 관리를 이해하는 데 기본이 된다!!
깔끔한 정리 좋아요!