멀티프로세스는 하나의 응용 프로그램을 여러개의 프로세스로 분리하여 동시에 여러 작업을 수행 하는것을 말한다..
=> 웹 브라우저는 멀티프로세스 구조를 가지고 있다.
=> 하나의 프로세스가 죽어도 여러 개의 프로세스가 동시에 실행되므로 다른 프로세스 이용해서 처리하면 된다(??), 프로그램이 죽지않아 프로그램 전체의 안정성이 높아지는 것에 목적.
멀티프로세스는 IPC가 가능하다.
IPC란 프로세스끼리 데이터를 주고받고 공유데이터를 관리하는 메커니즘
공유메모리 방식이란 여러 프로세스가 서로 통신할 수 있도록 공유메모리를 생성해서 통신하는 방식.
- 각 프로세스의 메모리를 다른 프로세스가 접근할 수 없다.
=> 하지만 공유메모리를 통해 여러 프로세스가 하나의 메모리를 공유할 수 있다.
한 탭(프로세스) 내에서 여러 스레드를 생성할 수 있는 방식을 의미.
여러 스레드들은 독립적으로 수행되지만, 프로세스의 자원을 공유하며 리소스 낭비를 줄이며 "동시에" 수행된다.
(예를 들어, 하나의 탭에서 페이지 로딩, 자바스크립트 처리, UI 갱신 등이 동시에 일어날 수 있습니다.)
장점
단점: 하나의 스레드가 망가지면, 모든 스레드가 작동 불능 상태
=> 멀티스레드의 안전성에 대한 단점은 Critical Section(임계 영역) 기법을 통해 대비.
멀티프로세스는 하나의 응용프로그램을 여러개의 프로세스로 분리하여 실행.
=> 여러 개의 프로세스가 동시에 실행되므로, 하나의 프로세스가 죽어도 프로그램이 죽지않아 프로그램 전체의 안정성이 높아지는 것에 목적.
하나의 컴퓨터에서 2개이상의 프로세서(CPU) 들이 두가지 이상의 일을 "동시 처리"할 수 있는 방식. (Parallelism) => 속도 향상 목적
둘의 정의를 봤을때 한개의 작업을 동시에 처리하는 면에서 비슷하다고 생각할 수도 있다.
하지만 이 "동시처리"를 어떻게 하느냐? 에 따라 차이가 있다.
멀티프로세스: "프로세스(process)가 멀티인것"
멀티프로세싱: "프로세서(CPU)가 멀티인것"
멀티프로세싱은 parallel로 수행
멀티스레딩은 concurrently하게 수행
Concurrency: 한 시점에 오직 한가지의 작업만 처리하지만, 여러 작업이 동시에 수행되게끔 보이는 효과를 일으킴
Parallelism: 실제로 같은 시간에 여러 작업을 동시에 처리 => 속도를 높이는 목적
코어: CPU 내에서 명령어를 실행하는 부품
멀티코어 프로세서: 여러개의 코어를 포함하는 CPU
멀티스레드 프로세서: 하나의 코어로 여러개의 명령어를 동시 실행할 수 있는 CPU
-> 개발단계에서 한번만 이루어지며, 소스코드가 컴파일러에 의해 컴파일되어 기계어로 변환된다. 실행파일이 생성됨.
-> 유저가 실행파일을 실행하면, 실행파일이 디스크 -> 메인메모리로 로드됨. (운영체제가 메모리 관리를 통해 프로세스에 필요한 메모리 공간을 할당함)
-> 이때 실행파일은 프로세스가 된다.
-> 프로세스가 생성될때 메모리가 할당되고, 커널 메모리 공간에 PCB가 생성되어 프로세스의 정보를 관리한다.
-> 운영체제의 스케줄러는 Ready상태의 프로세스 중 CPU할당 받을 프로세스를 결정한다.(OS의 스케줄링 알고리즘에 따라 결정)
-> 새로 실행될 프로세스가 Running상태로 전환시킴, 이전 실행중인 프로세스 상태는 PCB에 저장됨. (컨텍스트 스위칭)
cf. 컨텍스트 스위칭은 타임슬라이스가 끝나거나, 높은 우선순위의 프로세스의 등장으로 발생가능하다.
-> PC가 1씩 증가하며 명령어들이 순차적으로 실행된다.
-> I/O 요청이 필요한 경우, 프로그램은 시스템 콜을 통해 운영체제의 커널에게 서비스를 요청한다.
-> 이때 프로그램은 유저모드에서 커널모드로 전환된다.
-> 하드웨어 인터럽트가 발생하면, CPU는 현재 수행중인 작업을 중단하고.
-> 컨텍스트 스위칭 발생해서 현재상태 PCB 저장 및 인터럽트 처리 루틴을 실행한다.
-> 인터럽트 처리 마치면, 다시 작업 복귀
프로세스는 CPU와 메모리 자원을 할당받아 실행됩니다.