교착 상태란? 먼저 결론부터 말하면, 진행되던게 trafic에 의해 더 이상 진행 될수 없게된 상태다. 예시로는 교차로를 들 수 있다. 교차로에 신호등이 고장나서 전부 초록불에다가 다들 바쁘다고 한다면? 서로 가겠다 바빠 서로의 앞길을 막게되는 경우가 생길 것이다. 그런데 이상태에 앞에 차들이 전부 재활용 마크 모양새로 막게 된다면? (ㅋㅋ 아 후진을 해야지 ) 이러한 문제는 프로세스 실행과정에서도 생기는데, 두개 이상의 프로세스가 각자 가지고 있는 자원을 가진 채 다른 자원이 생기길 기다리고 있다면 그 어떤 프로세스도 진행할 수 없는 교착 상태가 된다. 다른 대표적인 예시로 식사하는 철학자 문제가 있다. 이 철학자들은 고상하신 분들이기 떄문에 앞에 파스타를 먹기위해 두개의 포크가 필요하다. 각자 한 개..
동시에 실행되는 프로세스들이 만약 하나의 자원에 대해 동시에 접근했다고 생각해보자. 그럼 하는 읽고, 하나는 쓰며, 하나는 수정하고 ..여러 작업을 동시에 한뒤 각자, 동.시.에. 저장을 하게된다면? A : 나는..남김이..야.. B : 나는.. 똥..변비가.. 있어.. 막무가내로 동시에 저장을 하게 된다면..? C : 아.. 집에 있는 고양이.. 보고 싶다.. ------------------------------------> 나는 집에 있는 똥이 보고싶어. D : 운영체제..좋아.. 이런 말도 안되는 기록이 될 수도 있다. 말을 너무 어렵게 한 부분이 있다고 생각한다. 다시금 쉽게 얘기하자면!!! 동시다발적으로 실행되는 프로세스들은 공통의 목적을 올바르게 수행하기 위해 서로 협력하며 영향을 주고 받기..
우리는 앞서, 하나의 CPU가 하나의 프로세스에 밖에 할당 되지 못한다는 것을 알았다. 위의 이야기만 들으면 CPU가 하나인 상태로 하나의 프로세스가 끝날 때까지 할당시켜준다하면... 아마 우리의 컴퓨터는 매우 느려질 것이다. 프로세스 하나에 모든 자원을 할당하게되면 비용도 어마무시하지만, CPU가 기다리는 시간이 길어지고 다른 프로세스는 현재 프로세스가 작업을 끝날떄까지 다 기다려하는 등 오버헤드가 많다.( 득보다 실이 너무너무너무 크다.) 이러한 문제를 해결하려면 CPU가 쉴 새없이 움직이도록 할당될 프로세스를 스케쥴링해줘야한다!! 여러 프로세스를 빠른 속도로 CPU가 조금씩 할당하고 다시 본래작업하는 프로세스로 돌아와 CPU를 할당 받는다면!!! 사용자의 시각으로 봤을 때는 마치 동시다발적으로 프로..
2장에서 프로세스에 대해 살펴봤다. 그럼 프로세스에서 더 나눠지는 스레드에 대해 알아보자 스레드(Thread)란? 스레드란 간단히 말하면 실행의 단위다. 프로세스를 구성하는 실행의 단위로써, 즉 하나의 프로세스에 여러개의 스레드가 있을 수 있다는 말이다. 이러한 구조는 하나의 프로세스에서 여러부분을 동시에 실행할 수 있게 해준다. 단일 스레드와 멀티 스레드? 프로세스의 실행의 흐름단위가 하나라면 해당 프로세스는 단일 스레드 프로세스라고 볼 수있다. 하지만 스레드라는 개념이 도입되면서 하나의 프로세스에 여러일을 동시에 처리할 수 있게되어 멀티스레드를 가진 프로세스가 효율적으로 사용되고 있다. 스레드는 프로세스 내에 각기다른 스레드 ID, 프로그램 카운터 값을 비롯한 레지스터값, 스택으로 구성된다. 각자 다..
이전에 프로세스는 프로그램이 실행 중이라면 process라고 칭한다 했다. 다시금 설명을 하자면, 프로세스란? 프로그램이 실행되기 전에는 보조 기억장치에 저장된 데이터로 두고, 해당 데이터(프로그램)가 메모리에 적재되어 CPU를 통해 실행되는 순간 프로세스가 된다. 프로세스는 크게 두가지로 나눠지는데, 프로그라운드 프로세스(forground process)와 백그라운드 프로세스(background process)가 있다. 프로그라운드 프로세스(forground process)의 경우 사용자가 보이는 앞에서 실행되는 프로세스이며 백그라운드 프로세스(background process)의 경우 사용자가 보지 못하는 편에서 실행되는 프로세스다. 사용자와 상호작용하지 않고 작업을 수행하는 백그라운드 프로세스도 있..
컴퓨터는 하드웨어로 이루어져있지만 전기 공급만으로 알아서 작동하는 마법의 상자가 아니다. 우리가 프로그램을 작동하기위해서는 하드웨어를 통해 소프트웨어를 작동시켜야하는데 이 연결지점이 되는 것이 운영체제다. 그렇다면 운영체제는 무엇을 하는가? 운영체제는 프로그램의 실행에 필요한 요소들을 가리키는 자원(CPU, 메모리, 보조기억장치, 입출력장치 etc..)들을 할당하고 프로그램이 올바르게 실행되도록 제어하는 특별한 프로그램이다. 운영체제가 프로그램? 운영체제는 인터넷 브라우저와 같은 프로그램으로써 다른 여타 프로그램들과 같이 메모리에 적재되어야한다. 그러나 운영체제는 특.별.한 프로그램이기때문에 메모리상에서 커널 영역이라는 공간에 컴퓨터 부팅 시 따로 적재되어 실행된다. 메모리 안에 커널 영역은 무슨소리야?..
우리는 Stream 이 프로그래밍 중에 자주 나오는데 왜 이 단어가 쓰이며 무슨 의미인지 확신하지 못할 때가 많다. 그래서 이번 포스트를 통해 스트림에 대해 다시 알아보고자 한다. 먼저 스트림이란??!! "스트림"이라는 단어는 우리가 프로그래밍에서 사용할 때 사용되는 의미와 실생활에서 사용되는 의미와 매우 유사한 의미를 나타내기 때문에 선택되었다. 데이터에 대한 내용은 잠시 잊고, 물줄기에 대한 비유를 생각해 보자! 강에서 물이 계속 흐르듯이 개발자는 데이터의 지속적인 흐름을 받는다. 데이터가 어디에서 오는지는 알 수 없으며, 대부분의 경우 굳이 어디서 받을지 알 필요가 없다. (파일, 소켓 또는 기타 소스에서 오는 데이터든 상관 없다). 이것은 물줄기를 받는 것과 매우 유사하며, 물줄기가 어디에서 오는..
이전 포스트에서 트랜스포트계층 프로토콜이 UDP와 TCP가 다중화와 역다중화 , 신뢰 줄 수 있는 서비스 제공을 한다고 말했다. 이번 포스트에서는 다중화와 역다중화에 대해 알아보자. 다중화와 역다중화 다중화와 역다중화는 네트워크 계층이 제공하는 호스트 대 호스트 전달 서비스에서 호스트에서 동작하는 애플리케이션에 대한 프로세스 대 프로세스 전달 서비스로 확장하는 것이다. 다시금 쉽게 얘기하자면 휴대폰대 휴대폰으로 연결하는 것이 네트워크계층이라면 카톡대 카톡으로 연결하게 해주는 것이 트랜스포트 계층이라고도 할 수 있겠다. 2장에 대한 포스트에서 소캣을 통해 애플리케이션이 데이터를 전달한다고 했는데 (출발지 -> 목적지) 데이터 운행중 네트워크 계층에서 트랜스포트 계층의 목적지 소캣으로 전달하는 작업을 역다중..