컴퓨터 과학
-
어셈블리 관련 정리(x86)
어셈블리어 C를 비롯한 고급언어들과 달리 컴퓨터와 가까운 저급 언어이기 때문에, 아키텍처에 따라 문법(규격)이 다르다. 즉 호환성이 없다. 기계어와 1대1로 대응된다. 프로그램 생성&동작까지.. 소스파일 -> 컴파일러 -> (어셈블리어 -> 어셈블러) -> 기계어 (오브젝트 코드) -> (+라이브러리) Linkage Editor -> 실행 파일 -> 로더 -> 메모리 CPU 레지스터란 CPU 내부에 위치한, CPU가 메모리에서 가져온 필요한 값들을 저장하는 곳. 속도가 가장 빠르다. 모든 연산은 cpu 레지스터에서 이루어져야한다. CPU 레지스터의 종류 ebp, esp : 현재 스택프레임의 stack pointer(=top), base pointer eax, ebx, edx : 연산시 주로 사용하는 임시..
-
메모리
가상 메모리 32비트 기준, 실제 메모리(RAM)와 가상 메모리의 공간은 4GB(2^32)이고, 이 중 절반인 2GB는 커널이 차지한다. 가상 메모리 속 커널 영역은 모든 프로세스가 공동으로 소유하고, 프로그래머가 접근할 수 없다. 프로그래머가 직접 제어하는 메모리는 RAM이 아니라, 프로세스마다 가지고 있는 가상 메모리이다. 가상 주소와 가상 메모리를 사용함으로써 프로세스마다 4GB의 메모리를 할당해줄 수 있다. (만약 4GB를 하드 디스크에 저장하고 현재 동작하는 프로세스의 메모리를 RAM에 올린다면, 4GB 선 할당해야하는 부담이 있을 것이고, 속도도 매우 느릴 것이다.) 아래의 그림은 앞으로 설명할 page, page table, TLB, MMU의 동작을 설명한다. Paging 가상 메모리와 물리..
-
캐시 메모리
캐시 메모리 캐시 메모리는 RAM의 느린 속도를 극복하기 위해서 등장한 메모리로, CPU 내부에 존재한다. 일반적으로 데이터를 로드할 때 캐시 메모리에 저장하는데, 이 때 그 데이터 뿐만 아니라 인접한 데이터도 같이 로드하게 된다. (64 바이트의 크기를 가지는 캐시 라인 단위로) 이는 어떤 데이터에 접근할 때 인접한 데이터 또한 접근할 확률이 높기 때문이다. 데이터 로드 시점에, 캐시 메모리에 이미 해당 데이터가 저장돼있어서 캐시에서 데이터를 로드한다면 이를 캐시 히트라고 하고, 아까와 같이 캐시 메모리에 저장되어있지 않아 메모리에서 로드하는 상황을 캐시 미스라고 한다. 캐시 히트 확률이 높다면, 로드하는 시간이 그만큼 줄어들기에 성능이 좋아진다. 그럼 캐시 히트를 자주 발생시키려면 어떻게 해야할까? ..
-
프로세스, 스레드, 동기화
프로세스 실행 중인 프로그램을 프로세스라고 한다. 메모리 관점에서의 프로세스: 코드-데이터-힙-스택 영역과 레지스터 상태. 프로세스 상태 변화 new> ready: 프로세스 생성 ready> running: 스케줄러가 해당 프로세스를 Run 시킴 running > ready : 스케줄링 우선순위에서 밀렸거나 작업 완료 run > waiting: 프로세스가 I/O 진행 등의 이유로 블락됨. waiting> ready : I/O 종료 등의 이유로 블락이 해제됨. waiting> terminated : 프로세스 종료 컨텍스트 스위칭 실행 중인 프로세스 변경 시, 작동하는 절차를 컨텍스트 스위칭이라고 한다. 구체적으로, 현재 프로세스의 context(register set 등)를 PCB에 저장 실행될 프로세스의..
네트워크
-
OSI 7 계층, TCP/IP 4 계층
OSI 7 Layer VS TCP/IP 4 Layer OSI(Open System Interconnection) 7 Layer : 국제표준화기구(ISO)에서 개발한 모델. 통신의 표준을 나타내지만, 실제로는 TCP/IP 프로토콜을 사용한다. 물리 계층 (Physical Layer) 실제 물리 장치로 실질적인 전송을 담당하는 계층이다. 데이터를 전기적 신호로 변경해주며, 데이터의 형태는 bit이다. 데이터링크 계층 (Data Link Layer) 물리적 링크를 통해서, 장치 간에 데이터를 신뢰성있게 전송하는 계층이다. (이더넷(MAC) 주소 이용) 네트워크 계층에서 받은 데이터를 frame으로 구성, 물리 계층으로 전송한다. 네트워크 계층 (Network Layer) packet을 송신측으로부터 수신측으로..
-
네트워크 작동 방식
네트워크는 어떻게 작동할까? 알아보기에 앞서 기본 개념을 정리해본다. LAN과 WAN LAN은 Local Area Network의 단축어로, 근거리 통신망이다. 가정이나 사무실 등의 컴퓨터를 서로 연결하는 등 작은 범위의 네트워크를 의미한다. WAN은 Wide Area Network의 단축어로, 이 LAN들을 서로 이어주는 네트워크이다. 주로 ISP(인터넷 서비스 제공업체)에서 관리한다. IP주소 IP(Internet Protocol) 주소는 L3계층의 인터넷 상 호스트(컴퓨터)의 고유한 주소이다. (L3 계층) x.x.x.x 의 [0~255] 범위의 숫자 네개로 이루어진다.(IP v4) 이 IP주소는 다시 서브넷에 할당되는 네트워크 번호와, 각각의 컴퓨터에 붙는 호스트 번호로 나뉜다. 위의 사진과 같이..
-
TCP의 작동 방식
네트워크 계층별 데이터 단위 L1~L2: Frame L3: Packet - Packet의 최대 크기: MTU(Maximum Transmission Unit) = 1500byte (MSS + TCP Header(20) ,IP Header(20)) L4: Segment - Segment의 payload 최대 크기: MSS(Maximum Segment Size) = 1460byte. TCP Socket: Stream(연속적으로 이루어진 크기가 큰 데이터), 이 Stream을 MSS 단위로 잘라서 Segment들로 만든다. 참고로 UDP는 Datagram 단위이다. TCP 헤더의 Sequence Number, Acknowledgement Number Sequence Number: 보낸 데이터의 순서, 즉 현재 ..
-
[C/C++] 소켓 API
소켓 API 정리 SOCKET socket(int af, int type, int protocol) : 소켓 생성 인자: af: AF_INET(IPv4), type: SOCK_STREAM(TCP), SOCK_DGRAM(UDP), protocol: 0(TCP,UDP) 반환: 소켓 생성 int closesocket(SOCKET s) : 소켓 닫기 인자: s: 닫을 소켓 반환: 성공: 0, 실패: SOCKET_ERROR int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData) : Winsock DLL 사용 시작 인자: wVersionRequested(버전.MAKEWORD(2,2)), lpWSAData(WSADATA 변수의 주소) 반환: 성공:0, 실패:오류코드..