글 전체보기
-
Linking대학/시스템소프트웨어 2022. 12. 11. 19:45
여러개의 분할된 ELF(Executable and Linkable Format)파일을 연결하는 과정을 linking이라고 부른다. 이 과정을 컴파일러의 linker가 수행하게 되는데, 그 동작 과정을 살펴보자. - Static linking 1. Symbol resolusion 심볼이란 함수 이름, 변수 이름 등 사람이 보기 편한 이름들을 말하며 이는 symbol table에 의해 관리된다. symbol resolusion은 이러한 심볼을 기계가 알아들을 수 있도록 이름을 주소값으로 바꾸는 작업을 말한다. 2. Relocation 분리되어있는 영역을 하나의 영역으로 합친다. 이 때, 코드의 위치가 변하게 되기 때문에 주소 값 역시 변하게 된다. 그 변화하는 주소 값을 계산하는 역할을 수행한다. linki..
-
Memory Management대학/시스템소프트웨어 2022. 12. 11. 18:58
프로세스는 CPU에 의해 위와 같은 가상 메모리 영역을 할당받게 되고, 이 가상 메모리는 MMU(Memory Management Unit)에 의해 실제 DRAM의 메모리 영역에 매핑된다. malloc으로 메모리를 할당받을 수 있고, realloc으로 메모리 영역을 확장할 수 있다. 하지만 경우에 따라 realloc시 메모리 영역을 통째로 복사해야 하는 경우가 생긴다. 이런 경우 성능저하 이슈가 생길 수 있는데, 이런 경우를 줄이기 위해 메모리 공간을 할당부터 관리까지 세심한 노력이 필요하다. 지금부터 그 노력의 흔적을 살펴보자. 메모리를 위와 같이 words 단위로 관리한다고 가정하자. (실제로 1word = 32B or 64B 이렇게 하고있긴 함) 만약 p = malloc으로 메모리 공간을 할당 받았는..
-
Synchronization대학/시스템소프트웨어 2022. 12. 11. 16:29
두 개 이상의 스레드가 하나의 메모리 공간을 동시에 참조하는 경우, 레이스 컨디션이 발생하여 프로그램을 실행할 때 마다 다른 결과가 출력되는 일이 발생할 수 있다. 이를 방지하기 위해 동기화를 하고, critical section(임계 영역)에 접근할 수 있는 스레드의 수를 제한한다. 동기화를 달성하기 위한 방법으로 mutex와 semaphore가 있다. - Mutex mutual exclusion(상호 배제)의 약자로 lock이라고도 한다. 기본적인 아이디어는 임계 영역에 진입할 때는 스레드가 뮤텍스를 잠그고, 나갈 때 잠금을 해제하는 아이디어이다. 즉, 잠겨있는 뮤텍스 아래로는 실행이 불가능하다. 뮤텍스를 사용할 때 주의할 점은, 임계영역으로 진입한 스레드가 뮤텍스를 풀기 전 중지되면 안된다는 것이다..
-
Threads대학/시스템소프트웨어 2022. 12. 11. 15:51
프로그램의 실행 흐름으로 c에서는 보통 posix threads library를 이용하여 구현한다. 스레드의 주된 활용법은 I/O, 네트워크 통신 등 처리시간이 오래 걸리거나, 언제 종료될지 모르는 동작을 수행하면서 동시에 다른 중요한 동작을 수행해야 할 때, 대기시간이 긴 동작을 자식 스레드에게 위임하는 방식으로 주로 활용한다. - pthread_create void *processfd(void *arg) { char buf[BUFSIZE]; int fd; ssize_t nbytes; fd = *((int *)(arg)); for ( ; ; ) { if ((nbytes = read(fd, buf, BUFSIZE)) < 0) break; // process buf data } return NULL; } ..
-
java 네트워크 프로그래밍대학/객체지향프로그래밍 2022. 12. 10. 19:32
- 네트워크 기초 소켓: 프로세스 간 통신 채널의 엔드 포인트 포트: 호스트 내부에서 소켓을 구분할 때 사용 (0~65535) ( 21: FTP / 23: Telnet / 43: whois / 80: HTTP / 443: HTTPS ) 프로토콜: 통신간 데이터 전송 규약 IP: 네트워크 계층 프로토콜 ( IPv4(1*4바이트) / IPv6(2*8바이트) ) 도메인: 호스트를 식별하는 이름으로 IP주소 대신 사용. 단, DNS 서버에 도메인이름-IP주소가 저장되어야 한다. TCP: 연결 지향 전송 계층 프로토콜 (Handshake가 있고, 데이터 송수신 체크를 하기 때문에 신뢰성이 높다) UDP: 비 연결 지향 전송 계층 프로토콜 (Handshake가 없고, 데이터 송수신 체크를 안 하기 때문에 속도가 빠..
-
java lambda expression / 메서드 참조대학/객체지향프로그래밍 2022. 12. 10. 15:36
- lambda java를 함수형 언어처럼 사용할 수 있게 하는 문법 (n) -> (n%2) == 0; 메서드와 달리 이름이 없기에 익명 함수라고도 불리고, 메서드와 달리 특정 클래스에 종속되지 않는다. 예외처리도 가능하며 변수에 대입될 수도, 메서드의 인자로 전달될 수도 있다. interface NumericFunc { int func(int n); } class BlockLambdaDemo { public static void main(String[] args) { NumericFunc factorial = (n) -> { int result = 1; for (int i = 1; i 다음에 오는 값을 리턴하는데, 중괄호가 오게되면 리턴하지 않고, 중괄호 안의 코드를 실행한다. - functional ..
-
java generic(2)대학/객체지향프로그래밍 2022. 12. 10. 01:15
- Generic Method 지금까지는 클래스에서 제네릭의 사용법을 살펴봤는데, 메서드에서도 제네릭을 사용할 수 있다. 일반 클래스 내부에서도 메서드의 매개변수나 리턴 값을 제네릭 매개변수로 정의할 수 있다. class GenMethDemo { // Comparable는 java.lang에서 선언된 클래스로 T를 비교 가능한 상태로 만들어준다. // V타입 배열 안에 T타입 변수를 넣기 위해 V extends T. static boolean isIn(T x, V[] y) { for(int i=0; i < y.length; i++) if(x.equals(y[i])) return true; return false; } public static void main(String[] args) { // Use i..