브라우저에서는 보안적인 이유로 cross-origin HTTP 요청들을 제한한다. 서로 다른 도메인의 리소스 요청을 보내고 받게 되면, CORS 에러가 발생한다 ! 예시로, 프론트엔드와 백엔드가 협업하게 되면, 각각 따로 서버를 띄우기에 CORS 문제가 발생할 수 있다. 그래서 cross-origin 요청을 하려면 서버의 동의가 필요하다. 만약 서버가 동의한다면 브라우저에서는 요청을 허락하고, 동의하지 않는다면 브라우저에서 거절한다. .❗❕❗ 이러한 허락을 구하고 거절하는 메커니즘을 HTTP-header를 이용해서 가능한데, 이를 CORS(Cross-Origin Resource Sharing)라고 부른다. 그래서 브라우저에서 cross-origin 요청을 안전하게 할 수 있도록 하는 메커니즘이다. COR..
DeadLock 둘 이상의 thread가 각기 다른 thread가 점유하고 있는 자원을 서로 기다릴 때, 무한 대기에 빠지는 상황을 말한다. deadlock이 발생하는 조건은 상호 배제(mutual exclusion), 점유 대기(hold-and-wait), 비선점(no preemption), 순환 대기(circular wait)이다. 이 4가지 조건이 동시에 성립할 때 발생할 수 있다. deadlock 문제를 해결하는 방법에는 무시, 예방, 회피, 탐지-회복의 4가지 방법이 있다. Deadlock이 발생하는 조건 상호 배제(mutal exclusion) 동시에 한 thread만 자원을 점유할 수 있는 상황이다. 다른 thread가 자원을 사용하려면 자원이 방출될 때까지 기다려야 한다. 점유 대기(hol..
PCB와 TCB PCB(Process Control Block) Process는 자신에 관한 정보를 하나의 데이터 구조에 저장하여 관리한다. 이를 PCB라고 부른다. TCB(Thread Control Block) 하나의 Thread를 관리하는데 필요한 정보를 담고 있는 구조체이다. 프로세스의 상태를 관리하는 PCB보다 적은 양의 정보가 담겨있다. Context 프로세스의 경우 현재 프로세스가 중단 되었을 때, 중단된 시점 부터 다시 프로세스를 실행하기 위한 정보를 말한다. 이는 PCB라는 구조체에 저장된다. Scheduling 스케줄링은 "자원"에 "작업"을 할당하는 행위이다. 자원은 프로세서, 네트워크 연결, 외부 장치 등을 의미하고, 작업은 thread, process 혹은 data flows를 의미..
동기화 문제 동기화 문제란 서로 다른 process/thread가 동일한 자원에 동시에 접근하여 엉뚱한 값을 읽거나 수정하는 문제이다. 한 순간에 하나의 process/thread만 해당 자원에 접근하고 조작할 수 있도록 보장해야 한다. 다시 말해서 process/thread들이 동기화되도록 할 필요가 있다. 임계 영역 둘 이상의 process/thread가 동시에 동일한 자원에 접근하도록 하는 프로그램 코드 부분을 의미한다. 임계 구역의 원자성을 보장하기 위해 임계구역으로 진입 허가를 요청하는 부분을 entry section이라고 하고, 임계 영역이 끝나고나면 exit section으로 퇴출하게 된다. 대표적인 동기화 방법으로 Mutex와 Semaphore가 있다. Mutex mutal exclusio..
process는 각자 자신만의 독립적인 주소공간을 가져, 다른 process가 이 주소공간을 참조하는 것을 허용하지 않는다. 그렇기 때문에 다른 process와 데이터를 주고받을 수 없다. 이를 해결하기 위해 운영체제는 IPC 기법을 통해 process들 간에 통신을 가능하게 해준다. IPC(Inter-Process Communication) process간 통신(IPC)에는 기본적으로 공유메모리(shared memory)와 메시지 전달(message passing)의 두 가지 모델이 있다. 공유메모리(shared memory) process들이 주소 공간의 일부를 공유한다. 공유한 메모리 영역에 읽기/쓰기를 통해서 통신을 수행한다. process가 공유 메모리 할당을 kernel에 요청하면 kernel..
멀티 프로세스와 멀티 스레드는 모두 한 어플리케이션에 대한 처리방식이다. 멀티 프로세스 운영체제에서 하나의 응용 프로그램에 대해 동시에 여러 개의 프로세스를 실행할 수 있게 하는 기술을 말한다. 보통 하나의 프로그램 실행에 대해 하나의 프로세스가 메모리에 생성되지만, 부가적인 기능을 위해 여러개의 프로세스르 생성하는 것이다. ✖️ 멀티 프로세스는 하나의 프로그램에서 여러 개의 프로세스를 실행하는 것을 의미하고, 멀티 프로세서는 여러 개의 CPU 코어가 하나의 시스템에서 동시에 실행되는 것을 의미한다. 멀티 스레드 하나의 프로세스 안에 안에 여러개의 스레드가 있는 것을 말한다. 하나의 프로그램에서 두가지 이상의 동작을 동시에 처리하도록 하는 행위가 가능해진다. 멀티 프로세스 vs 멀티 스레드 multi t..