시분할
시분할 컴퓨팅이란 ? 각 사용자들에게 컴퓨터 자원을 시간적으로 분할하여 사용할 수 있게 해 주는 것을 말한다. 시분할이란 다음과 같은 상황을 극복하게 위해 만들어졌다. 출력이 사용자에게 표시되고 입력을 키보드에서 읽어들이는 대화식 인터페이스를 제공한다고 가정하자. 대화식 입출력 속도는 보통 사람들의 처리속도와 같으므로 종료할 때까지 오랜시간이 걸린다. 만약, 시분할 시스템이 없다면 컴퓨터는 입출력 처리를 끝마칠때까지 기다려야한다. 만약 시분할 시스템이 있다면 운영체제는 CPU를 그냥 쉬게하지 않고 다른 사용자의 프로그램을 수행하도록 전환시킨다.
시스템은 한 사용자에서 다음 사용자로 빠르게 전환함으로써 각 사용자에게 자신만이 컴퓨터를 사용하고 있는 것과 같은 착각을 주지만,실제로는 여러 사용자가 하나의 컴퓨터를 공유하고 사용하고 있는 것이다.
두개의 컴퓨터가 연결될때는 블루투스나 케이블선등 하나로 쉽게 연결이 가능하다.
하지만 컴퓨터 열대를 연결할때는 ?
이렇게 보이는 것과 같이 수많은 갯수의 케이블이 필요하다. 즉, 소수의 컴퓨터를 연결할 경우와는 달리 여러개의 컴퓨터를 연결할때 필요한 매체가 있는데 그것이 바로 라우터이다. 라우터의 없다면, 10대의 컴퓨터를 연결하는데 각 컴퓨터당 9개씩 필요할 것이고 총 90개의 케이블이 필요하게 될 것이다. 만약 라우터가 있다면? 모든 컴퓨터는 라우터로 데이터를 보내고 그 라우터에서는 알맞는 컴퓨터에 데이터를 보내주게 됩니다.
아쉽게도 수십 수천대의 컴퓨터는 라우터만으로는 확장이 불가능합니다. 아주 먼곳에 있는 지역과는 케이블 연결이 불가능하기 때문이죠, 이를테면 서울에 사는 사람과 부산에 있는 사람이 통신을 한다고 할 때 둘사이를 케이블로 연결하기는 힘듭니다. 하지만 이미 구성되어있는 케이블을 이용한다면 이는 어렵지 않습니다 전화 및 전력과 같이 이미 연결된 케이블이 있기 때문이죠. 전화기반시설은 세계 어느곳과도 연결이 되어있기 때문에 네트워크는 이미 구성이 되어있는 상태인 것이다. 전화 시설과 연결하기 위해서는 전화시설이 처리할 수 있는 정보로 바꾸어주는 매개체가 필요한데 그것이 바로 모뎀입니다.
모뎀을 통해 전화국과 연결된 데이터가 다른 네트워크와 주고받기 위해서는 인터넷 서비스 제공업체인 ISP에 연결해야합니다. ISP는 모두 함께 연결되는 몇몇 특수한 라우터를 관리하며 다른 ISP 라우터에도 액세스 할 수 있습니다. 우리의 네트워크 메세지는 ISP 네트워크의 네트워크를 통해 대상 네트워크로 전달된다.
array의 경우 요소에 인덱스를 통해 인덱스를 통해 접근할 수 있으며,메모리 위치에 연이어 저장되기 때문에 중간에 요소가 삽입 삭제되면 요소를 하나하나 땡겨오는 작업이 필요하기 때문에 O(n)의 복잡도를 가지지만, 링크드 리스트의 경우 새로운 요소에 할당된 메모리 위치 주소가 linkedlist 이전 요소의 레퍼런스에 저장하기 때문에 중간에 삽입과 삭제가 있더라도 O(1)이 소요된다.
단순연결리스트의 경우 노드가 하나의 포인터에 의해 다음 노드와 연결되는 구조를 가진다.즉, 노드들을 한방향으로 연결하여 리스트를 구현하는 자료구조이다.
반면, 이중 연결 리스트의 경우 양쪽 방향으로 소통이 가능하게 노드를 연결한 리스트이다.
즉,각 노드가 두개의 레퍼런스를 가지고 각각 이전 노드와 다음 노드를 가리키는 연결리스트이다.
단순연결리스트 중에서도 마지막 노드가 첫 노드와 연결된 것을 원형 연결 리스트라고 한다. 마지막 노드를 참조하는 포인터가 단순 연결 리스트의 head 역할을 한다.
프로세스의 경우 실행될 때 운영체제로부터 프로세서,필요한 주소 공간, 메모리 등의 자원을 할당받는 작업의 단위이다. 스레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위이다.
프로세스의 현재 상태를 나타내는데 필요한 모든 요소들을 프로세스 문맥이라고 한다. 특점 시점에 프로세스가 어느만큼 작업을 했고 이 프로세스가 어디까지 와있는지 확인하기 이해서 필요하다.CPU는 계속 여러 프로세스를 번갈아 담당하기 때문에 어떤 프로세스를 어디까지 작업했는지 알아야한다.
없다면, 프로세스 제어권이 넘어왔을 때 다시 실행해야한다.
동기와 비동기는 처리해야 할 작업들을 어떠한 흐름으로 처리 할 것인가에 대한 관점. 즉, 호출되는 함수의 작업 완료 여부를 신경쓰냐에 따라 함수 실행/리턴 순차적인 흐름을 따르느냐,안따르느냐가 관심사이다.
비동기는 시작,종료가 일치하지않는다. A함수가 다른 함수인 B를 호출할 때 콜백함수를 함께 전달하여 B의 작업이 완료되면 함께 보낸 콜백 함수를 실행되는것을 말한다. 함수 A는 함수 B의 작업 완료 여부에는 신경쓰지 않는다.
블로킹과 논블로킹의 경우 처리되어야 하는 하나의 작업이 전체적인 작업 흐름을 막느냐 안막느냐에 대한 관점이다 → 즉,제어권이 누구한테 있느냐가 관심사이다.
논블록킹이란 다른 주체의 작업에 관련없이 자신의 작업을 하는 것이다. A함수가 B 함수를 호출해도 제어권은 그대로 자신이 가지고 있는다.
비동기의 경우 다음 작업이 요청되는 시간을 신경쓴다. 현재 작업의 응답이 끝나지 않은 상태에서 다음 작업을 요청한다. 이와 반대로 동기는 현재 작업의 응답이 끝남과 동시에 다음 작업을 요청한다.
논블로킹의 경우 함수의 리턴시점과 제어권을 신경쓴다. 제어권이 계속 호출한 함수에 있기 때문에 작업의 완료여부와 관계없이 새로운 작업을 수행할 수 있다.이와 반대로 블로킹의 경우 제어권이 호출된 함수로 넘어가서 호출된 함수가 작업을 마무리 된 후 함수를 호출한 함수로 제어권이 넘어간다.
선생님(상위 프로세스) 학생(하위 프로세스)
동기 + 블로킹
****동기 + 논블로킹****
****비동기 + 논블로킹****
**비동기 + 블로킹**