전체 글 131

[NW] #5. 네트워크 통신 구조 ( 외부 )

* 네트워크 통신 구조 ( 외부 ) 앞서 설명한 내부에서의 통신에서, NIC 를 거쳐서 PC 외부로 패킷이 나가게 되는데, 이 때의 과정을 대략적으로 설명하려고 한다. End-point 에서 End-point 까지 중간 단계는 어떻게 거쳐질까 ?? 몇 가지 개념들을 살펴보고 차근차근 알아보자. * 허브 ( Hub ) 허브 Hub 링크 ( 위키 ) => 데이터 패킷을 받으면 연결된 모든 장치들에게 보내는 역할. 즉, '단순 분배를 하는 중계 장치' 이다. ( Broadcast ) => 모든 컴퓨터에 데이터가 분배되기 때문에 속도도 나누어서 계산되어진다. 만약, 데이터 전송 속도가 500Mbps 이고 장치가 5대 연결되어 있다면 하나당 속도는 100Mbps 로 나뉘어진다. => 기능적으로 단순하기 때문에 점..

네트워크/개념 2022.09.27

[NW] #4. 네트워크 통신 구조 ( PC 내부, TCP / IP 기준 )

* 네트워크 통신 구조 => 세부적으로 알아야할 것들이 매우 많지만 대략적인 구조를 알기 위해서 참고된 링크들을 통해 나름대로 정리해봤다. 우선, 기본적으로 알아야할 개념 몇 가지를 살펴보자. * TCP / IP TCP 링크 ( 위키 ) 아마 컴퓨터 공학을 조금이라도 공부해본 사람이라면 빼놓을 수 없는 단어일텐데, 한마디로 정의하자면 'Protocol' 이다. 즉, 규약 ( 규칙 ) 이라는 말인데 TCP ( Trasmission Control Protocol ) 는 앞서본 4 계층 ( transport ) 에서 쓰는 규약이다. IP ( Internet Protocol ) 는 3 계층 ( network ) 에서 쓰는 규약이다. 따라서, TCP/IP 는 3,4 계층에서 쓰는 규약을 통틀어 말하고 데이터를 보..

네트워크/개념 2022.09.26

[NW] #3. Network 계층 구조와 데이터 단위

* 네트워크 계층 구조 ex) OSI 7 layer, DOD Model OSI 모형 링크 ( 위키 ) https://www.stevenjlee.net/2020/02/09/%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-osi-7%EA%B3%84%EC%B8%B5-%EA%B7%B8%EB%A6%AC%EA%B3%A0-tcp-ip-4%EA%B3%84%EC%B8%B5/ 위 링크를 참고했다. * OSI 7 layer 국제 기구인 International Organization for Standaradization ( ISO / 국제 표준화기구 ) 에서 1983 년에 OSI ( Open Systems Interconnection ) 7 계층을 표준화함. * DOD Model 미 국방성 산하 방위고등연..

네트워크/개념 2022.09.26

[NW] #2. Subnetting ( 서브넷팅 )

* Subnetting ( 서브넷팅 ) 앞에서 설명한 것처럼 IP 주소는 Network ID / Host ID 로 나뉜다. 이 때, 사용하는 것이 '서브넷 ( Subnet )' 이다. 한마디로 넷을 나눈다고 생각하면 된다. * 서브넷팅은 왜 사용할까?? 가령, A 클래스의 IP 주소는 대략 2의 24승 정도의 Host 를 사용할 수 있는 IP 클래스인데 그것보다 조금 작은 2의 20승 정도의 Host 만을 필요로 할 때, B 클래스로 쓰게 되면 감당을 하지 못하고 A 클래스를 쓰게 되면 일부분은 낭비가 되어진다. 이 상황에서 버려지는 일부분을 낭비하지 않도록 서브넷팅을 이용해서 더 잘게 나누어서 사용할 수 있게 된다. 물론, 해당 범위마다 첫번째 주소와 마지막 번째 IP 주소를 사용할 수 없어서 구역을 ..

네트워크/개념 2022.09.23

[NW] #1. IP ( Internet Protocol )

* 인터넷 프로토콜 ( Internet Protocol ) 링크 ( 위키 ) 링크 ( 나무위키 ) => 컴퓨터마다 사용하는 운영체제도 다르고 프로그램의 경우 구현된 언어가 다르기 때문에 네트워크에서 이들이 통신할 수 있도록 하려면 어떤 '규약 (규칙)' 이 필요하게 된다. => 기본적으로 이후 배우게 될 TCP/IP 가 표준이다. => 'IP 주소' 의미는 Host 에 대한 식별자이다. ( '주민등록번호' 와 유사 ) 해당 IP 주소를 출발지와 목적지로 설정함으로써 네트워크 통신을 가능하게 하고 각기 고유한 의미를 가진다. 네트워크 계층 ( Network Layer, L3 ) 에서 다루게 된다. * Host => '네트워크에 연결된 어느 컴퓨터' 의미 * End Point => 통신 데이터를 최종적으로 ..

네트워크/개념 2022.09.21

[OS] #12. 가상 메모리 ( Virtual Memory )

* 가상 메모리 가상 메모리 링크 ( 위키 ) => 가상 메모리는 '각각의 프로세스마다 주어지는 선형 메모리' 이다. => 보통 운영체제가 관리하고 할당해주며 32bit 환경에서의 가상 메모리 크기는 '4GB' 64bit 환경에서는 이론상 엄청큰 가상 메모리 영역을 할당할 수 있지만, '8TB' 정도로 제한하고 있다. 물리 주소 ( Physical Address ) : 실제 하드웨어 RAM 에 존재하는 주소. 가상 주소 ( Virtual Address ) : 프로세스마다 존재하는 가상 메모리의 주소. => 물리 주소와 가상 주소를 분류해놓은 이유는 프로세스마다 어떤 주소를 저장해야할 필요가 생기는데 프로그램이 메모리에 올려지게 될 때, 어느 위치에 올려질지 모르는 상황에서 물리 주소는 알 수 없다. 따라..

[OS] #11. 세마 포어 ( Semaphore )

* 세마포어 ( Semaphore ) 세마포어 링크 ( 위키 ) => Wait( ) , Signal( ) 신호 방식을 통해서 하나 이상의 프로세스 / 쓰레드가 임계 구역에 접근 가능하도록 하는 장치. 이진 세마포어 ( Binary semaphore ) : 세마포어 변수 값이 0 or 1 을 가진다. 계수 세마포어 ( Counting semaphore ) : 초기값은 가능한 자원의 수로 정해지며 범위는 정해져있지 않다. => 여기서 말하는 자원이라함은 컴퓨터에서의 자원 이다. 예를 들면, H/W 인 CPU, 프린터, 혹은 쓰레드가 함께 접근할 수 있는 데이터 등이 되겠다. => 쓰레드가 사용할 수 있는 자원의 개수 ( R ) 가 없다면 대기 큐에 삽입해 Sleep 시키고 다른 쓰레드의 작업이 끝났을 때, ..

[OS] #10. mutex lock & 스핀락 ( Spinlock ) & CAS ( Compare-And-Swap )

* 동기화 ( Synchronization ) 동기화 링크 ( 위키 ) => 원자성, 가시성, 코드 재배치 문제 등을 해결하기 위한 방법. => 데이터의 일관성을 맞추는 것. 순서를 맞추거나 어느 구역을 통제함으로써 데이터를 수정하고 모든 곳에서 같은 값으로 읽을 수 있도록 함. => 멀티 쓰레드 환경에서 동기화를 하지 않는다면 우리가 기대한 결과가 다를 수 있기 때문에 짜여진 프로그램이 정상적으로 동작하기 힘듬. => 대신, 동기화를 위한 알고리즘 등이 필요하고 이를 행하기 위해 비용이 들고 속도가 느려진다. => 반대의 개념을 '비동기 ( Asynchronous )' 라고 부르는데 순서에 상관 없이 여러 쓰레드가 돌 수 있도록 허가해주는 상태 이다. 통제하지 않음으로써 최대의 효율을 낼 수 있지만 데..

[OS] #9. 원자성 ( atomic ) & 가시성 ( visibility ) & 코드 재배치

* 원자성 ( Atomic ) 원자성 링크 ( 위키 ) => 더 이상 쪼개지지 않는 연산. 예를 들어, int a = 0; ++a; ++a; 부분을 디스 어셈블리로 보게 되면 총 3줄에 걸쳐 나온다. eax 에 값을 가져와서 inc 증가시키고 다시 eax 값을 [a] 에다 넣는다. => 이 때, 위 3단계 사이로 다른 쓰레드들이 접근해 값을 수정할 수 있는 여지가 생긴다는 말. 이 경우, '원자성을 보장하지 못한다' 라고 말하고 위 3단계를 하나의 연산으로 취급해 실행하는 것을 '원자성을 보장한다.' 라고 한다. => 원자성을 보장 받기 위해서 atomic 에 관한 명령이나 변수를 선언한다. atomic 명령들은 내부적으로 CPU 의 도움을 받아 실행 중간에 간섭 받거나 중단되지 않는다. 또, 같은 메모..

[OS] #8. 공유 자원 & 임계 구역 ( Critical Section )

* 공유 자원 => 쓰레드는 자신의 Stack 영역을 제외한 프로세스 영역을 프로세스 내의 쓰레드들끼리 공유한다. ( 메모리 공유. ) => 공유 자원을 서로 앞다투어 접근하는 행위를 '경쟁 조건 ( Race Condition )' 이라고 한다. * 원자성 ( Atomic ) 원자성 링크 ( 위키 ) => 더 이상 쪼개지지 않는 연산. => 다음 장에 자세히 다룬다. * 임계 구역 ( Critical Section ) 임계 구역 링크 ( 위키 ) => 둘 이상의 쓰레드가 동시에 접근해서는 안되는 코드를 말함. => 둘 이상의 쓰레드가 값을 '수정' 할 수 있는 구역. * 임계 구역 문제를 해결하기 위한 조건 1. 상호배제 ( Mutual Exclusion ) => 한 프로세스가 임계 구역에 들어가면 다른..