Girvan-Newman algorithm을 사용하며 언제 멈추어야 적절한 clusterling일지 알 수 있어야 한다.
'얼마나 잘 나뉘었는가'를 수치로 나타낸 것이 modularity Q이다. (-1~+1)
기댓값이 0.3 ~ 0.7이면 partitioning이 잘 된 것이다. mod가 max일 때 가장 좋다.
Modularity Q
네트워크가 얼마나 잘 partitioning 되었는가?
sum of {(# edges within group s) - (expexted # edges within group s})
짚고 넘어간다: 왜 modularity를 decomposing의 기준으로 삼는가? (실제 edge 개수 - expected edge 개수)가 클수록 군집되어있기 때문에 community일 확률이 높다. 이것이 모든 community(라고 간주한 것)의 Q값 합을 구하는 이유
경쟁조건이란 2개 혹은 그 이상의 프로세스들이 전체가 공유하는 메모리에 읽기/쓰기를 할 때, 어떤 프로세스가 먼저 실행되는지에 따라 결과가 달라질 수 있는 상황이다. race condition이 있는 코드를 예측하는 것은 불가능에 가깝기 때문에 그 코드에서는원하는 결과가 나오지 않을 가능성이 높다.
A 프로세스와 B 프로세스가 있다고 생각해보자. 두 프로세스 모두 공유 메모리에 저장된 3을 읽어와서 1을 더하고 다시 저장해야 한다. 우리의 예측으로는 두 프로세스가 한 번씩 더하고 다시 저장하니 모든 프로세스가 실행된 후에는 5가 나와야 한다. 실제로는 이렇게 동작하여 5가 아닌 4가 결괏값이 될 수도 있다.
A 프로세스가 3을 읽어갔다.
A 프로세스가 3에 1을 더했다.
A 프로세스가 4를 공유 메모리에 다시 저장하기 전에 B 프로세스가 3이라는 값을 읽어갔다.
A 프로세스가 4를 공유 메모리에 저장했다.
B 프로세스가 3에 1을 더했다.
B 프로세스가 이미 4인 공유 메모리에 다시 4를 저장했다.
내가 원하는 대로 코드를 동작시키려면 최대한 경쟁조건을 피해야 한다. 즉 동시에 공유 메모리, 공유 파일, 기타 공유와 관련된 문제를 피할 수 있도록 조치해야 한다.
2. 상호 배제와 임계 영역 (mutual exclusion and critical section)
상호 배제(mutual exclusion)는 한 프로세스가 공유 자원을 사용하고 있을 때 다른 프로세스들이 사용하지 못하게 배제시키는 제어 기법을 말한다. 만약 위에서 A 프로세스의 모든 동작이 끝난 다음 B 프로세스가 공유 메모리에 접근할 수 있었으면 4를 만드는 오류는 발생하지 않았을 것이다. 운영체제의 전반적인 설계에 있어서 이러한 상호 배제를 구현하는 것은 매우 중요하다.
공유 메모리가 동시에 참조되지 않게 하기 위해 공유 메모리가 참조되는 부분을 임계 영역(critical section)이라 한다. 프로그램의 수행 조건을 잘 조절해서 2개 이상의 프로세스가 임계 영역에 들어가지 않도록 한다면 경쟁 조건을 피할 수 있을 것이다.
다만 임계 영역만으로 경쟁 조건이 만들어지지 않을 때가 있다. 공유 메모리를 사용하는 병렬 프로세스가 올바르고 효율적으로 수행되려면 다음과 같은 추가 조건이 필요하다.
Mutual exclusion
두 개 이상의 프로세스들이 동시에 임계 영역에 있어서는 안 된다.
Progress
임계 구역 바깥에 있는 프로세스가 다른 프로세스의 임계 구역 진입을 막아서는 안 된다.
Bounded Waiting
어떤 프로세스도 임계 구역으로 들어가는 것이 무한정 연기되어서는 안된다.
프로세스들의 상대적인 속도에 대해서 어떤 가정도 해서는 안된다.
CPU의 성능과 속도에 영향을 받지 않아야 한다.
3. 2개 프로세스의 상호 배제
2개 프로세스가 있다고 할 때 상호 배제를 구현하는 방법들을 각자의 단점과 발전과정을 중심으로 알아볼 것이다.
Strict Alternation은 turn 변수를 이용해 A 프로세스와 B 프로세스 중 하나에 순서를 준다.위 코드는 turn이 A일 때에 임계 영역에 들어가지 않고 while문으로 대기하다가 임계 영역에서 동작을 마치면 turn을 B로 준다. 따라서 상호 배제를 만족한다.
하지만 이 코드는 임계 영역의 실행 순서를 두 프로세스가 교대로 가져야만 한다. 예를 들어 turn이 A가 되어 임계 구역 내부 코드를 실행한 후 turn이 B가 되었는데 B 프로세스가 실행될 필요가 없다면, A 프로세스는 두 번 연속해서 임계 영역에 들어갈 수 없다. 따라서 Bounded waiting과 Progress를 만족하지 못한다.
1번 방법에서는 turn이라는 공유 변수 1개 만을 사용해서 문제가 생겼다. 이번에는 turn을 flag 배열로 대치한다.이 알고리즘에서 flag 배열은 처음에 false로 초기화되어 있고 A 프로세스에 진입할 때 flag [A]를 true로 만들어서 진입 의사를 밝힌다. 그 다음에 B 프로세스가 진입할 의사가 있는지 확인하고, B가 임계 영역에서의 일을 끝낼 때까지 while문에서 기다린다. 마지막으로 임계 영역에서의 볼일이 끝났다는 것을 flag[A]를 false로 바꿈으로써 표시한다.
그러나 이 코드는 Progress를 충족하지 못할 때가 있다.만약 2개의 프로세스가 거의 같은 시간에 진입하려고 하면 turn [A]와 turn [B]가 모두 true가 되고 두 프로세스 모두 while문에서 영원히 돌게 된다. 이렇게 두 프로세스 모두 상대의 flag가 false가 되기를 기다리는 상태를 교착상태라고 한다.
교착상태는 임계 영역 진입을 위해서 일어날 수 없는 사건을 기다리는 상태를 뜻하는 말이다.
데커의 알고리즘은 2개의 프로세스를 위한 최초의 정확한 상호 배제 해결법으로 알려져 있다.구성요소는 다음과 같다.
flag : 초기값은 flag [0] = flag [1] = false이고 임계 영역에 들어가겠다는 표시는 true로 한다.
turn : 0 또는 1의 값을 갖는다. 0인 경우엔 A의 순서, 1인 경우엔 B의 순서이나 위 코드에는 이해를 위해 A, B로 표시한다.
두 프로세스는 동시에 진행하면서 자신의 flag를 true로 하고 상대방 flag를 검사한 다음 turn값에 따라서 if 이하 절을 수행하거나 수행하지 않을 수 있고, 결국 turn값이 A이면 A 프로세스가 진입하고 turn값이 B이면 B 프로세스가 진입하게 된다. 따라서 한 프로세스는 두 번 연속해서 임계 영역에 진입할 수 있다.
통신 공부를 시작하려니 뭐가 뭔지 모르겠음 네트워크가 뭔가 패킷이랑 프로토콜은 뭔가 이건 왜하는거고 라우터와 스위치의 차이는 뭐지 하는 나를 위해 쓰는 글 앞으로 풍부하게 채워나가고 수정할 예정
1. 네트워크 (NetWork)
네트워크는 Net와 Work의 합성어로 "컴퓨터간의 통신"을 의미한다. 즉 네트워크로 연결된 컴퓨터는 언제 어디서든 원하는 정보를 공유하여 활용할 수 있다.
네트워크는 다음과 같은 장점이 있다.
1.1. 데이터 공유
A학과 사무실과 B학과 사무실에서 U학교의 학생 정보를 가져와서 신입생에 대한 정보를 명단에 추가한다고 생각해보자. A학과와 B학과는 각각 기존 학생 명단을 받아와 A과 신입생, B과 신입생의 명단을 추가할 것이다. 이때 A학과 사무실은 U학교 학생 명단 + A학과 신입생 명단을 가지고 있을 것이고 B학과 사무실은 U학교 학생 명단 + A학과 신입생 명단을 가지고 있을 것이다. 이 두 명단은 모든 신입생들의 정보를 가지고 있지는 않으므로 온전하다고 할 수 없다.
이 문제는 학생 명단을 중앙 컴퓨터, 즉 서버에 저장함으로써 해결할 수 있다. 모든 사용자가 공유하며 수정할 수 있는 학생 명단이 있다면 편하지 않을까? 하나의 데이터 파일에 해당하는 마스터 사본을 파일서버(file server)에 저장하고 필요할 때마다 A학과 사무실과 B학과 사무실이 마스터 사본을 수정할 수 있도록 만드는 것이 각자의 컴퓨터에 저장하는 방법보다 더 효율적일 것이다.
그러나 U학교 구성원이 아닌 외부 사람이 학생 명단 데이터에 접근하는 것을 막아야 할 필요가 있을 것이다. 이때는 아래 방법을 사용한다.
읽기 전용읽기 전용 : 공유 장치에 저장된 데이터를 읽기만 할 수 있다. 이 권한이 있는 사용자는 데이터를 읽을 수만 있고 수정할 수 없기 때문에 데이터가 변경될 가능성이 없다.
읽기/쓰기 : 공유 장치에 저장된 데이터를 읽고 수정할 수 있다. 이 권한이 있는 사용자가 데이터를 수정하면 네트워크에 연결된 모든 사용자는 수정된 데이터를 공유한다.
1.2. 주변장치 공유
A학과 사무실에는 컴퓨터가 3대 있다. 과와 관련한 업무를 효율적으로 처리하려면 세 컴퓨터가 모두 프린트 기능을 사용해야 할 텐데 컴퓨터마다 프린터기를 한 대씩 총 세대 쓰는 것은 비용이 비쌀 것이다. 이럴 때 하나의 프린터기를 각 컴퓨터와 네트워크로 연결해서 공유한다면 비용을 절약하면서도 프린터기를 중앙 집중화할 수 있어 관리도 수월해질 것이다.
1.3. 능률적인 통신
A, B, C, D, E학과 사무실은 서로 소통을 해야 할 일이 종종 생긴다. 메시지를 전달하기 위해서 각 학과의 사무실마다 네트워크를 연결한다면 간단히 계산해봐도 5! = 120개의 링크가 필요할 것이다. 하지만 우리가 널리 사용하는 데이터 통신 중 하나인 메일을 예로 들어보자. A학과가 D학과로 메시지를 담은 메일을 보내면 이 메일은 메일 서버로 이동하고, 서버는 새로운 메일이 도착했음을 D학과에게 알려줄 것이다. 그러면 D학과는 이메일 프로그램을 이용해 서버에서 메시지를 받아서 확인할 수 있다. 이 경우에는 5개의 사무실이 소통하기 위한 링크가 5개밖에 없을 것이다. 네트워크는 호스트 간의 데이터 송수신을 능률적으로 수행할 수 있도록 해준다.
1.4. 손쉬운 백업
데이터는 귀중한 자산이므로 데이터를 백업하는 일은 매우 중요하다. 네트워크를 이용하면 사용자가 접근 가능한 공유 저장장치 중 하나에 모든 데이터를 손쉽게 백업할 수 있다.
2. 네트워크의 구성
네트워크에는 세가지 구성요소가 있다.
2.1. 호스트(host)
호스트는 컴퓨터 네트워크에 연결된 컴퓨터나 기타 장치들을 의미한다.컴퓨터, 휴대폰, 프린터기에서부터 서버까지 모두 호스트라고 할 수 있다. 우리가 휴대폰으로 카카오톡, 인스타그램 등을 하며 애플리케이션을 사용하는 중 다양한 데이터를 송수신하는데 이는 모두 호스트로부터 출발한다.
2.2. 네트워크 접속 장치
네트워크 접속 장치는 애플리케이션의 데이터를 정상적으로 전송하기 위한 장치이다.접속 장치는 다양한 종류가 있지만 기본적으로 스위치와 라우터가 존재한다. 스위치는 한 네트워크 내부에서 데이터를 전송하도록 돕는 장치이고 라우터는 서로 다른 네트워크를 구분 짓고 연결하는 장치이다.
2.3. 네트워크 전송 매체
호스트와 네트워크 접속 장치는 네트워크 전송 매체에 의해 서로 연결된다.전송 매체는 크게 유선 전송 매체와 무선 전송 매체로 나뉘는데, 유선 전송 매체는 일반적으로 케이블을 의미한다. 무선 전송 매체는 전파를 말하며, 네트워크 통신에 이용되는 전파는 규격에 따라 전파의 파장이나 주파수가 지정되어 있다. 네트워크에서 데이터를 송신할 때는 전송 매체에 따라 디지털 데이터가 물리적 신호로 변환된다.
3. 네트워크의 종류
우리가 가까운 거리는 걸어가거나 지하철을 타고 먼 거리는 시외버스나 기차를 타듯이 테이터가 이동하고자 하는 거리에 따라서 네트워크의 종류를 구분할 수 있다. 가장 작은 규모의 네트워크인 PAN(Personal Area Network)부터 광대역 네트워크인 WAN(Wide Area Network)까지 그 쓰임과 네트워크 연결 방법이 다양하다. 지금은 기초를 위해 간단한 것들만 살펴본다.
3.1. LAN (Local Area Network)
LAN은 범위가 지역적인 네트워크로 범위가 건물 안이나 특정 지역인 네트워크이다.따라서 한 건물 또는 인접한 건물군 내에 있는 네트워크는 하나의 LAN으로 간주된다. 집에서 인터넷을 이용할 때나 PC방, 사무실 등 작은 규모로 인터넷을 연결할 때 LAN을 사용한다. 만약 A학과 사무실과 B학과 사무실이 다른 LAN을 사용하는데 두 연구실 간 데이터 통신이 필요할 때는 두 LAN 간 링크를 만들어야 한다. 각 LAN은 특정한 프로토콜(데이터를 송수신하는 일련의 규칙)로 운용되기 때문에 링크를 만들기 위해서는 서로 다른 네트워크 유형의 데이터 공유 방법을 알아야 한다.
신호가 약해지거나 오류가 발생할 확률이 낮다.
데이터 전송 비용이 싸다.
연결 거리가 짧다.
3.2. WAN (Wide Area Network)
WAN은 2개 이상의 LAN을 넓은 지역에 걸쳐 연결한 것을 말한다. 서로 다른 LAN에 속하는 U학교의 C캠퍼스와 D캠퍼스는 데이터나 프로그램을 공유하기 위해 라우터를 연결하여 WAN을 구성하기도 한다. 추가적으로 LAN에 포함되지 않는 호스트도 WAN을 이용하여 연결될 수 있다. WAN은 ISP(Internet Service Provider)가 제공하는 서비스를 이용해 구축된 네트워크이다. ISP는 인터넷 상용 서비스를 하고 있는 SK, KT 등과 같은 통신 사업자를 의미한다.
멀리 떨어진 LAN을 연결하므로 신호가 약해지거나 오류가 발생할 확률이 높다.
데이터 전송 설비를 임대하는 비용이 많이 든다.
거리가 멀어지는 만큼 속도가 느려진다.
3.3. 인트라넷 (Intranet)
인터넷에서 사용하는 회선과 여러 기반 기술을 이용하여 구축하는 사설 네트워크이다. 각 지방에 분산된 호스트를 전용 회선으로만 연결하는 것은 어려운 작업이지만 인트라넷을 활용하면 손쉽게 구현할 수 있다. 각 호스트에서 가장 가까운 ISP까지만 연결하면 되기 때문이다. 아무리 호스트가 멀리 떨어져 있어도 호스트를 ISP까지만 연결하면 저렴한 비용으로 사설 네트워크를 구축할 수 있다. 인트라넷을 이용하면 모든 호스트에서 문서관리, 메신저, 게시판, 결제내역 등을 공개되지 않은 웹페이지에서 처리할 수 있다. 예시로는 각 대학교의 포털을 들 수 있다.
4. 패킷
우리가 매일 사용하는 인터넷은 전 세계의 작은 네트워크부터 큰 네트워크까지 연결된 거대한 연결망이다. 전 세계가 네트워크로 연결되어 있으므로 우리는 해외 웹사이트에 접속할 수 있다. 다만 이를 위해서는 통신에 관한 규칙이 필요한데 이 규칙에는 패킷(packet)이 사용된다. 패킷 구조에 대해서는 앞으로 다른 글에서도 자세히 알아볼 것이다.
패킷은 헤더(header), 페이로드(payload), 제어 요소 등을 포함하는 데이터 세그먼트이다. 헤더는 데이터의 형태와 데이터의 송수신지, 일련번호 등으로 구성되고 페이로드는 실제 전송 데이터를 포함하는 부분이다.
또한 패킷은 컴퓨터 간에 데이터를 주고받을 때 네트워크를 통해 전송되는 데이터의 전송 단위이다. 만약 용량이 큰 고양이 이미지를 네트워크를 통해 보내고 싶다면 고양이 이미지 데이터를 작게 나누어서 보내는 것이 원칙이다. 만약 용량이 큰 데이터를 그대로 보낸다면 데이터가 네트워크 대역폭을 너무 많이 점유하여 다른 패킷의 흐름을 방해할 위험이 있기 때문이다.
대역폭(bandwidth) : 네트워크에서 이용 가능한 신호의 최고 주파수와 최저 주파수의 차이로, 데이터를 전송할 수 있는 최대 전송 속도이며 기본 단위는 bps(bit per second)이다.
송신자가 보낸 패킷은 보낸 순서대로 수신자에게 도착하지 않는다. 따라서 수신자가 예쁜 고양이 이미지를 보기 위해서는 패킷을 원래 순서대로 조립할 필요성이 있다. 그래서 송신 측에서 각 패킷에 순서대로 번호를 붙여 전송하고 수신 측에서는 번호에 맞춰 재조립함으로써 각 패킷을 원래의 위치로 되돌린다. 이렇게 번호 순서로 사진 전체의 패킷을 정렬하면 송신 측에서 보낸 예쁘고 귀여운 고화질의 고양이 사진을 수신 측이 드디어 볼 수 있는 것이다.