no image
[Network] OSI 7 Layer & TCP/IP
OSI 7 Layer & TCP/IP 거대한 네트워크 구조를 설명하는 것 Physical Layer 디지털 신호를 아날로그 신호로 변환 변환한 데이터를 전선을 통해 전달(1대1 연결 상황) Data-Link Layer 다수의 컴퓨터가 통신하기 위해서는 하나의 장비에 전선으로 연결해야 함 이러한 장비가 허브 허브로 연결된 컴퓨터들은 하나의 네트워크를 구성한 것 하나의 네트워크 안에서 컴퓨터가 다른 컴퓨터로부터 데이터를 전송받게 될 때 어디서 어디까지가 어떤 컴퓨터에서 전송한 데이터인지 구별이 불가능 이를 해결하기 위해 각 컴퓨터는 데이터에 구분자를 추가해 다른 컴퓨터에 전달하게 됨 이것을 framing이라 하고 Data-Link Layer의 역할 또, 하나의 네트워크 안에서 컴퓨터가 다른 컴퓨터로 데이터를..
2024.02.18
no image
[C++] 생성자
기본 생성자 다중 정의 생성자 - 매개변수 존재(변환 생성자 - 매개변수가 1개) 복사 생성자(r-value 참조) 이동 생성자 복사 생성자 Deep copy : 대상체도 복사 Shallow copy : 복사하여 같은 대상체를 참조(기본 복사 생성자) class CTest { public: CTest() { m_nData = new int(5); } CTest(const CTest &rhs) { this->m_nData = rhs.m_nData; } ~CTest() { delete m_nData; } int m_nData = 0; }; 포인터 멤버 변수에 대해서는 shallow copy를 했을 때 같은 포인터를 가리키기 때문에 소멸자에서 에러 발생 복사 생성자를 정의해서 deep copy 해주어야 함 클..
2024.02.05
no image
[C++] 네임스페이스
변수 또는 함수 이름의 중복을 방지하고자 등장 #include namespace TEST { int g_nData = 100; void TestFunc(void) { std::cout
2024.02.05
no image
[C++] 다형성
int Add(int a, int b) { return a + b; } double Add(double a, double b) { return a + b; } template T Add(T a, T b) { return a + b; } C++은 다형성의 개념이 존재 이를 template을 사용해서 표현 가능 int Add(int a, int b = 10) { return a + b; } int Add(int nParam) { return nParam + 10; } int main(void) { Add(3); return 1; } 기본값과 함께 사용하면 모호성이 존재 모호성은 유지보수에 좋지 않음
2024.02.05
no image
[System] Socket
Socket은 커널에 구현된 프로토콜 요소의 추상화된 인터페이스 장치 파일의 일종 연결을 끊을 때는 Client가 끊도록 하는 것이 바람직 전체 흐름 Server(서버 소켓 + 통신 소켓) socket() : 소켓 생성 bind() : ip 주소 및 포트를 socket에 묶음(binding) listen() : client로부터의 연결을 대기 accept() : client로부터의 연결 요청에 응답 recv() / send() : 데이터 송수신 Client(통신 소켓) socket() : 소켓 생성 connect() : server로 연결 요청 recv() / send() : 데이터 송수신 API Socket #include #include int socket(int domain, int type, in..
2024.02.02
no image
[OS] 메모리
메모리 오버레이와 스왑 RAM이 작을 때 여러 프로세스를 쌓아서 실행 연산이 필요한 프로세스는 RAM에 적재하고 상대적으로 필요하지 않는 프로세스는 보조기억장치의 스왑영역에 저장 ex) 절전 모드로 전환할 때, RAM에서의 프로세스 상태를 보조기억장치에 저장(스왑인) 메모리 분할 방식 가변 분할 방식 : 프로세스의 크기대로 쌓음, 빈 공간 관리가 힘듦 -> 프로세스가 종료되면 외부 단편화 발생 가능 고정 분할 방식 : 일정 크기의 페이지 단위로 프로세스를 분할해서 쌓음, 페이지 단위가 프로세스와 차이가 크면 낭비 공간이 큼 -> 내부 단편화 발생 가능 가상 메모리 한정적인 메모리 공간을 사용자에게 더 많이 제공하기 위해 가상 주소 사용 메모리 관리 장치는 테이블을 이용해 가상 주소를 실제 데이터가 담겨 ..
2024.02.01
no image
[System] Semaphore
Process synchronization 다중 프로그래밍 시스템 여러 개의 프로세스들이 존재 프로세스들은 서로 독립적으로 동작 공유 자원 또는 데이터가 있을 때, 문제 발생 가능 동기화 프로세스들이 서로 동작을 맞추는 것 프로세스들이 서로 정보를 공유하는 것 Mutaul exclusion primitives enterCS() Critical section 진입 전 검사 다른 프로세스가 critical section안에 있는지 검사 exitCS() critical section을 벗어날 때의 후처리 과정 critical section을 벗어남을 시스템이 알림 Semaphore 1965년 Dijkstra가 제안 Busy waiting 문제 해결 음이 아닌 정수형 변수(S) 초기화 연산, P(), V()로만..
2024.01.26
no image
[System] Shared Memory
Shared memory 같은 메모리 공간을 프로세스들이 공유 동시에 Read/Write가 가능 Synchronization(동기화 필요) Dynaminc allocation -> fork()인 경우, 공유되지 않고 메모리 영역의 복사본이 생성됨 allocation shared memory segment #include #include int shmget(key_t key, size_t size, int shmflg); key : IPC key IPC_PRIVATE : private shared memory 생성 size : 공유할 메모리 크기(bytes) shmflg : 생성 방법 및 접근 권한 IPC_CREAT : key에 대한 shared memory가 없으면, 생성 IPC_EXCL : key에 대..
2024.01.26
no image
[System] Named Pipe
Named Pipe 이름이 있는 파이프(특수 파일, FIFO파일) 독립적인 프로세스 사이의 통신을 위해 사용 가능 FIFO 파일을 미리 만들어 두어야 함 Kernel 내부적으로 데이터 전달(파일에 내용이 쓰여지진 않음) creating a FIFO file #include #incldue int mkfifo(const char* pathname, mode_t mode); IPC with a named pipe 두 개의 프로세스가 하나의 FIFO 파일을 통해 통신 가능 proc.A : 쓰기 모드로 file open proc.B : 읽기 모드로 file open Example server #include #include #include #include #include #include int main(void..
2024.01.26