기초 지식 네트워크 네트워크란 두대 이상의 컴퓨터가 연결된 환경이며, 단순히 컴퓨터 2대를 케이블로 연결해도 그것은 네트워크이다. 인터넷은 전 세계의 네트워크가 연결된 환경으로 인공 위성과 광케이블 등 전 세계의 데이터를 통신하기 위한 물리적 환경과 ISP(Internet Service Provider)에 의해 구축되었다. ISP의 예시로 SKT, KT, U+와 같은 통신사가 있다. 패킷 패킷은 네트워크를 통해 전송되는 데이터의 조각이다. 큰 데이터를 한번에 보내지 않고 패킷으로 작게 나눠 보내는 이유는 너무 큰 데이터를 그대로 보내면 네트워크의 대역폭을 너무 많이 점유하기 때문에 다른 패킷의 흐름을 막을 수도 있기 때문이다. 작은 조각으로 나눠서 보내기 때문에 데이터를 받는 목적지(라우터)에서는 패킷을..
인터넷 프로토콜 4계층 IP 패킷 출발지 IP, 목적지 IP, 데이터, 기타.. 정보를 담고있다. IP 프로토콜의 한계 비연결성 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송 = 상대방의 컴퓨터가 꺼져있어도 그냥 보낸다. 비신뢰성 중간에 패킷이 사라질 수 있다. 패킷이 순서대로 도착한다는 보장은 없다. 프로그램 구분 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이면? TCP(Transmission Control Protocol) 출발지 Port, 목적지 Port, 전송 제어, 순서, 검증 정보...등을 가지고 있다. 아래와 같은 특징들로 IP 프로토콜의 한계를 해결해준다. 연결지향 - TCP 3 way handshake (가상 연결) 신뢰할 수 있는 프로토콜 데이터 전달 보증..
Deadlock 모든 프로세스가 대기하는 상태, Waiting Thread가 상태를 다시 바꿀 수 없는 상태 데드락은 반드시 아래 4가지 조건을 모두 만족해야한다. 하나라도 만족하지 않으면 발생하지 않는다. Mutual Exclusion Hold and Wait No Preemption Circular wait Deadlock Prevention 네가지 조건 중 하나를 막는 방법으로 단점이 너무 많다. 모드 리소스가 공유가 불가능하게 한다. Thread가 어떤 요청을 받으면 가지고 있던 리소스를 전부 버리고 다른 요청을 처리한다. 선점형으로 만든다. -> 다른 프로세스가 리소스를 가지고 있다면 리소스를 뺐는 방법 리소스 선점을 순서를 선형으로 부여하자. Deadlock Avoidance Request를 ..
동기화 문제 Bouded Buffer Problem (= Producer Consumer Problem) 버퍼가 비어있을 때 소비자가 기다려야하고, 버퍼가 가득 찼을 때 생산자가 기다려야한다. 이러한 문제를 해결하기 위해 Semaphore full, empty를 사용하여 비어있지 않은 버퍼의 개수와 비어있는 버퍼의 개수를 파악하고 각 상황에 맞게 생산자와 소비자가 접근할 수 있다. 이때 추가적으로 Critical Section에 대한 권한을 주기 위해 Mutex를 사용한다. 아래 예시를 보면 생성자는 empty가 1이상 있을 때 wait에서 빠져나와 Mutex를 통해 진입하여 작업을 실행한다. 반대로 소비자는 버퍼에 1개 이상 값이 들어있을 때 접근할 수 있다. Readers Writers Problem..
프로세스 동기화 여러 개의 프로세스가 데이터를 공유할 때 무결성을 유지해야한다. 예를 들어 P1과 P2가 공유 데이터를 사용할 때 아래와 같은 명령을 번씩 실행한다면, +1 -1이기 때문에 count의 값은 변화가 없어야한다. 하지만 count의 초기값이 0이라고 가정했을 때, P1과 P2가 count가 0일 때 동시에 접근한다면? 3번 라인이 실행될 때 count는 1이 됐다가 P2에 의해 -1이 될 수 있다. 1번씩 실행됐음에도 실행 결과가 바뀌었다. 동기화란 멀티 프로세싱에서 이와 같은 문제를 해결하기 위해 동시에 여러 프로세스가 접근해야하는 공유 데이터를 동시가 아닌 순차적으로 접근하도록 만드는 방법이다. Race Condition 여러 개의 프로세스에서 동시에 같은 데이터에 접근하려고 하는 상황..
Scheduling Ready 상태에 있는 프로세스들 중 언제, 어떤 프로세스에게 CPU를 할당시킬 것인지 정하는 것 Scheduling을 통해 여러 프로세스를 왔다갔다하며 CPU를 최대로 활용할 수 있다. scheduling은 Kernel Thread에서 실행된다. Preemptive vs Non-Preemptive (선점형, 비 선점형 ) Preemptive: 스케줄러에 의해 실행 중인 프로세스의 CPU 할당을 헤제할 수 있다. Non Preemptive: 프로세스가 작업을 마치고 릴리스될 때까지 CPU 할당을 유지한다. CPU 스케줄링 결정 Running -> waiting (I/O 발생) runnging -> ready (다른 프로세스 할당) waiting -> ready (I/O가 끝남) ter..