링커를 사용하는 이유 모듈화 자주쓰는 코드는 모듈화 시켜서 갖다쓰면 편하다. 공간적 : 하나의 모듈만 존재하면 여러 실행파일에서 가져다 쓸 수 있다. 시간적 : 바꾸고 싶은 라이브러리 부분이 있다면 거기만 바꿔서 링킹을 진행하면 된다, 전체를 다시 컴파일할 필요가 없다. 오브젝트 파일의 종류 relocatable object file (a.o) - string, 어셈블리어, 전역변수 같은 프로그램 코드, 다른 오브젝트 파일과 합처져 실행파일을 만들 수 있음 Executable object file (a.out) - relocatable object file을 재배치해서 실행 가능하게 만든 파일 shared object file (a.so) 실행할 때 동적으로 프로그램에 들어가는 파일 can be load..
ICMP(internet controll protocal) 프로토콜: 인터넷 제어 메시지 프로토콜(ICMP)로 .ICMP는 오류를 처리하고 IP 메시지를 제어한다. IP에는 오로지 패킷을 목적지에 도달시키기 위한 내용들로만 구성되어 있다. 따라서 정상적으로 목적지 호스트에 도달하는 경우에는 IP에서 통신이 성공하고 종료되므로 아무런 문제가 없다. 그러나, 만일 전달해야 할 호스트가 꺼져 있거나, 선이 단절된 경우와 같은 비정상적인 경우에 이 패킷 전달을 의뢰한 출발지 호스트에 이러한 사실을 알려야하지만, IP에는 그러한 에러에 대한 처리 방법이 명시되어있지 않다. 이러한 IP의 부족한 점을 메꾸기 위하여 사용되는 것이 바로 ICMP 프로토콜이다. 구조 요약 Type: 에러 타입 Code: 상세 에러 Ch..
ARP protocol: IP주소로부터 mac 주소를 찾는 프로토콜 - 모든 네트워크간 통신은 mac 주소가 필요 (data link layer에서) ARP request is broadcast A가 B의 IP 주소로 B에게 mac 주소를 요청 (어느 mac 주소를 모르니 B를 찾을 수 없어 broadcast 요청) ARP reply is unicast B가 A에게 맥주소를 응답함 (A가 보낸 패킷이니 unicast) ARP 패킷 구조 Hardware Type: mac 주소의 유형을 나타내며 이더넷 통신시 항상 1로 설정 Protocal Type: 매핑 대상인 프로토콜 주소의 유형을 나타내며 IPv4의 경우 0x0800으로 설정 -> 프로토콜에 따른 헤더, 데이터의 길이가 각각 다르기 때문에 어떤 프로토..
디바이스 드라이버란 디바이스 드라이버란 마우스, 키보드, 모니터, 디스크, 네트워크 인터페이스 카드 등 컴퓨터의 주변 장치를 제어하기 위한 프로그램이다. 디바이스 드라이버가 없다면 주변 장치들을 사용할 수가 없다. read()라는 작업을 디스크 관점에서 어떻게 처리할 것인가?와 같은 하드웨어에 밀접한 기능들은 모두 디바이스 드라이버로 구현된다. 디바이스 드라이버는 리눅스 커널에서 모듈로 구현하므로, 먼저 리눅스 커널 모듈에 대해서 알아야 한다. 이건 글로 정리해두었다. 디바이스 드라이버의 역할 디바이스의 종류 디바이스는 문자 디바이스 드라이버, 블록 디바이스 드라이버로 나눌 수 있다. 문자 디바이스는 시간 순으로 들어오는 데이터를 처리한다. 예를 들어 마우스, 키보드의 입력과 같이 순서대로 처리하는 것이..
메모리의 기본 단위와 저장 메모리에 데이터를 저장할 때 사용되는 최소 단위 = 비트 하지만 비트 단위로 연속적인 데이터를 저장하다 보면 불편함이 발생 40 + 30을 한다고 했을 때 이 두 십진수를 101000 11110이란 비트로 변환하여 계산해야 하는데, 이 두 수를 특정 주소에서 찾는다고 했을 때 만약 비트 단위로 데이터가 메모리에 저장되어 있다면 위 비트수 만큼의 주소를 조회해야 한다. 이는 많은 양의 데이터를 처리하는 컴퓨터에게 부적합 그래서 메모리에 저장되는 최소 단위를 바이트로 정함 (1byte = 8bit) 메모리 주소 하나당 8bit 만큼의 데이터가 담긴다면 40(00101000)과 30(00011110)이 각각 한 주소에 저장되어 40 + 30을 두 번의 주소 조회로 계산할 수 있을 것..
분산 적재 방식 정적, 동적할당과 buddy system은 메인 메모리 안의 연속된 공간에 하나의 프로세스를 적재하는데 반해 분산 적재 방식은 하나의 프로세스를 특정 단위로 쪼개어 연속되지 않은 공간에 저장이 가능하게 함 paging 프로세스를 동일한 크기의 조각으로 나눔 나눠진 프로세스 각각을 page라고 부름 메모리도 조각으로 나눔 나눠진 조각을 Frame이라고 함 page의 사이즈 = Frame 사이즈 여야 한다. 이렇게 나누는 이유는 프로세스를 page 단위로 쪼개어 여러 frame에 하나의 프로세스의 page들을 분산하여 적재하기 때문에 위의 세 그림을 보면 프로세스 A와 B를 정해진 단위로 쪼개어 메모리의 frame에 적재한 것을 볼 수 있고 밑의 세 그림을 마저 보면 B가 종료되고 D가 할당..
메모리 관리의 개요 static allocation 정적 할당 - 프로그램 시작 이전에 할당 컴파일 타임에 결정 dynamic allocation 동적할당 - 컴퓨터 과학에서 동적이란 runtime을 뜻함 요청이 오면 heap에 할당 프로그램 실행시 미래에 사용될 메모리의 양을 정확히 알 수 없기 때문에 범용 os가 지원함 운영체제의 기능임 OS에서 메모리 관리란? 다수의 프로세스를 위해서 user part의 메모리를 분할하는 기능 - os가 동적으로 메모리 관리 어떻게 효율적으로 할까 - 요구사항 relocation - 재배치 가능하도록 관리해야함 메인메모리는 여러 프로세스가 동시에 사용하므로 1 프로그램 컴파일, 코딩시에 프로세스가 메모리의 어느 위치에 올라갈지 예측 불가능 2 어느 위치에 올라가더라..
DeadLock Avoidance 교착상태 회피 교착상태 회피 기법은 교착 상태 발생을 위한 4가지 조건 중 1, 2, 3을 허용하며, 또한 4처럼 자원 할당 순서를 미리 정하지 않는다. 자원을 할당할 때 교착 상태가 발생 가능한 상황으로 진행하지 않도록 고려한다. 미래의 자원 요청 정보 필요 현재 자원의 가용 개수와 프로세스의 자원 요구향을 미리 알고 있어야 가능하다. 자원 할당 거부 (Resource Allocation Denial) 자원을 할당할 때 교착상태가 발생할 가능성이 있는지 여부를 동적으로 판단. 교착 상태의 가능성이 없을 때 자원 할당 안전한 상태를 계속 유지할 수 있으면 자원 할당 But, 각 프로세스들이 필요한 자원들을 미리 운영체제에게 알려야 한다. 시스템 상태 구분 안전한 상태(s..