-> 개발단계에서 한번만 이루어지며, 소스코드가 컴파일러에 의해 컴파일되어 기계어로 변환된다. 실행파일이 생성됨.
-> 유저가 실행파일을 실행하면, 실행파일이 디스크 -> 메인메모리로 로드됨. (운영체제가 메모리 관리를 통해 프로세스에 필요한 메모리 공간을 할당함)
-> 이때 실행파일은 프로세스가 된다.
-> 프로세스가 생성될때 메모리가 할당되고, 커널 메모리 공간에 PCB가 생성되어 프로세스의 정보를 관리한다.
-> 운영체제의 스케줄러는 Ready상태의 프로세스 중 CPU할당 받을 프로세스를 결정한다.(OS의 스케줄링 알고리즘에 따라 결정)
-> 새로 실행될 프로세스가 Running상태로 전환시킴, 이전 실행중인 프로세스 상태는 PCB에 저장됨. (컨텍스트 스위칭)
cf. 컨텍스트 스위칭은 타임슬라이스가 끝나거나, 높은 우선순위의 프로세스의 등장으로 발생가능하다.
-> PC가 1씩 증가하며 명령어들이 순차적으로 실행된다.
-> I/O 요청이 필요한 경우, 프로그램은 시스템 콜을 통해 운영체제의 커널에게 서비스를 요청한다.
-> 이때 프로그램은 유저모드에서 커널모드로 전환된다.
-> 하드웨어 인터럽트가 발생하면, CPU는 현재 수행중인 작업을 중단하고.
-> 컨텍스트 스위칭 발생해서 현재상태 PCB 저장 및 인터럽트 처리 루틴을 실행한다.
-> 인터럽트 처리 마치면, 다시 작업 복귀
프로세스는 CPU와 메모리 자원을 할당받아 실행됩니다.
스레드의 단점
스택은 지역변수, 매개변수, 리턴 값 등을 저장하는 메모리 공간이다. 따라서 독립적인 함수 호출을 위해서는 독립적인 스택 메모리 공간이 필요하다. 스레드는 독립적인 실행 흐름이므로 독립된 스택을 할당해야 한다.
✔ 프로그램 카운터(PC)를 독립적으로 할당하는 이유
PC값은 스레드가 실행할 다음 명령어를 나타낸다. 스레드는 CPU를 할당받았다가 스케쥴러에 의해 다시 반환해야 할 수 있다. 따라서 처음부터 끝까지 연속적으로 수행되지 못하므로 어느 부분까지 수행했는지 기억할 필요가 있다. 이를 위해 PC 레지스터를 독립적으로 할당해야 한다.
스레드 장점
성능 향상
자원 공유 효율성 향상
★3. 동시성 (동시에 실행될수있다. 작업 병렬 처리)
간결성
-> 작업 분리할 수 있어서 코드가 간결
스레드 단점
스레드간 상호간섭
많이 생성하면 성능저하 (스레드 많으면 컨텍스트 스위칭이 빈번하게 발생하므로)
★3. 동기화 이슈
=> 여러 스레드가 공유 자원에 동시에 접근할때, 동기화 문제가 발생할 수 있음.
=> Race Condition (경쟁 상태)
메모리 사용량 문
멀티테스킹 환경에서, 운영체제는 프로세스 간의 동기화와 보안을 관리합니다. 예를 들어, 두 프로세스가 같은 자원에 동시에 접근하는 것을 관리합니다.