글 전체보기
-
시그널대학/자료구조실습 2022. 10. 20. 21:11
- 시그널 프로세스가 실행되는 도중 예외 상황에 발생하는 이벤트 또는 신호를 시그널이라 부른다. 시그널의 정보와 그 의미는 일대일 매칭되기 때문에, 빠르게 전달하고 처리할 수 있다. Linux, UNIX 계열 운영체제에서는 kill -l 명령어로 시그널의 종류를 확인할 수 있다. 시그널은 다음의 두 가지 용도로 특히 잘 사용되는데, 비동기적인 이벤트의 발생을 통지하기 위한 용도(e.g. 프로세스 종료) 프로세스 간의 통신이나 동기화 하기 위한 용도(e.g. 알람) 시그널은 구현에 따라 비동기, 동기적으로 처리될 수 있다. 비동기적: 시그널이 특정 시간에 발생하는 것을 기다리지 않음 동기적: 동작을 중단하고, 시그널이 발생하기를 기다림 시그널은 각 기본동작이 정의되어 있다. (시그널 핸들러를 굳이 구현 안..
-
프로세스대학/자료구조실습 2022. 10. 20. 18:53
- 프로세스 프로세스란, 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 의미하며, 프로그램 자체와 프로그램의 상태가 메모리 상에서 실행되는 작업 단위를 의미하기도 한다. (프로그램은 하드 디스크에 저장되어 있는 일련의 명령어(실행 코드)의 모음을 말한다) 프로세스는 메모리에 적재된 프로그램의 명령어를 CPU가 실행함으로써 동작되며 한 프로세스는 한 프로그램 수행에 대응된다. 즉, 프로그램 하나를 여러 번 구동하면, 여러개의 프로세스가 실행된다. 프로그램이 메모리에 적재될 때, 가상 메모리는 공간을 나누에 데이터를 효율적으로 관리한다. Stack: 호출한 함수가 리턴될 주소를 임시로 저장하는 공간으로, 컴파일시 크기가 결정되기 때문에 크기를 무한정으로 늘릴 수 없다. Heap: 프로그래머가 필요할 ..
-
파일과 디렉토리대학/자료구조실습 2022. 10. 19. 17:53
UNIX file system에는 다음과 같은 4가지 파일 유형이 있다. 일반 파일(Ordinary file) - 텍스트 파일, 바이너리 파일, ... 디렉토리(Directory) 특수 파일(Special file) - 소켓, 디바이스, ... 지명(Named) - 지명 파이프(FIFO) 이런 파일들을 다루기 위해 유닉스 계열 운영체제는 파일의 정보와 관련된 구조체, 함수 등을 제공한다. 이 포스트에선 구조체를 기준으로 나누어 설명하도록 하겠다. - struct stat c에서는 일반 파일들의 정보를 저장할 수 있도록 stat 구조체를 제공한다. 또한 c에서는 아래와 같은 함수도 제공한다. 1. int stat(const char *pathname, struct stat *buf); 2. int lsta..
-
파일 입출력대학/자료구조실습 2022. 10. 19. 14:34
파일은 의미 있는 정보를 담는 논리적인 단위로, bytes의 배열 형태로 관리된다. 파일은 일반 파일, 디렉토리 파일, 자명 파이프 파일, 드라이버 파일 등등 여러 개로 분류되고, 그에 따른 확장자가 붙는다. UNIX 계열 운영체제에서 확장자는 크게 의미는 없고, 단지 해당 파일의 형식을 짐작하는 용도로 쓰이게 된다. 파일의 입출력은 kernel 단계에서 버퍼링 작업을 하게되며, 버퍼 덕분에 디스크에 여러 군데에 분산되어 저장된 데이터가 하나의 파일로 연결된 것 처럼 동작하게 된다. 응용 프로그램은 하드웨어에 직접 접근할 수 없다. 따라서 커널은 응용 프로그램에게 시스템 콜(system call) 함수를 제공하여, 파일에 접근하기 위한 인터페이스를 제공한다. - 파일 지시자 응용 프로그램이 시스템 콜 함..
-
java 멀티스레딩대학/객체지향프로그래밍 2022. 10. 18. 23:40
- thread 프로그램이 메모리에 적재가 되어 운영체제의 관리를 받게 되면 프로세스가 되는데, 이 프로세스의 실행 흐름을 스레드 라고 한다. 스레드는 프로세스에 비해 필요한 자원이 적고(그래서 경량 프로세스라 불림), 자원을 공유할 수 있다(프로세스는 공유 메모리를 제외하고 물리적으로 자원을 공유하지는 않는다). 이런 스레드를 이용해서 운영체제는 프로세스 기반 멀티 테스킹 뿐 만 아니라, 스레드 기반 멀티 테스킹을 할 수 있게 된다. (이를 멀티 스레딩 이라고도 부른다) 멀티 스레딩은 네트워크 통신이나, 인터랙티브 프로그램에서 자주 발생하는 유휴시간(idle time)을 최소화하여 사용자 경험을 올려줄 수 있다. java의 특징으로 멀티 스레딩을 JVM에서 지원하기 때문에 언어 레벨에서 멀티 스레딩 구..
-
c++ template, iterator대학/자료구조 2022. 10. 18. 17:46
- template int maximum(int a, int b) { if (a > b) return a; else return b; } ... maximum(1, 2); // 2 위 함수는 두 인자를 비교하여 큰 값을 리턴하는 함수이다. 하지만, int 자료형 밖에 비교할 수 없다. 만약 double형에 대해서 비교하고 싶다면, 같은 이름의 함수를 double형으로 또 만들어야 한다. 만약 문자열을 비교하고 싶다면? 클래스의 비교는? 같은 기능을 구현하기 위해서 정말 많은 같은 이름의 함수를 만들어야 할 것이다. 하지만, 아래의 template 기능을 사용하면 이런 걱정을 할 필요가 없다. template Item maximum(Item a, Item b) { if (a > b) return a; el..
-
Linked list대학/자료구조 2022. 10. 17. 21:29
연결 리스트는 배열과 물리적인 구조부터 다르다. 일반 배열은 물리적인 메모리 공간이 붙어있기 때문에, 배열의 첫 번째 주소만 알면, 특정 인덱스의 메모리에 빠르게 접근할 수 있다. 즉, Random access가 가능하다. (n번째 인덱스 = 배열 첫번째 주소 + n) 하지만 배열의 공간이 한정되어 있기 때문에, 공간이 꽉 찰 경우 에러를 발생시키거나 배열의 공간을 동적으로 늘려줘야 한다. 그 이후 데이터를 복사를 해야하기 때문에, 데이터 추가의 측면에서 성능이 좋지 못하고, 메모리 공간을 효율적으로 쓸 수 없다. 연결 리스트의 경우에는 이런 배열의 특성과 반대되는 특성을 갖는다. 연결 리스트는 물리적인 메모리 공간이 떨어져 있고, 각 메모리 공간이 다음 메모리 공간을 가르킨다. 따라서 배열에서는 가능한..
-
Dynamic array대학/자료구조 2022. 10. 17. 13:09
정적 배열의 진화 버전, 동적 배열에 대해 공부해보자. 그 전에 정적 배열과 다르게 동적 배열에서는 반드시 구현해줘야 하는 기능이 있다. 바로, destructor, copy constructor, 그리고 overloaded assignment operator 이다. 왜냐하면(destructor 구현의 이유), 정적 할당을 하는 경우에는 런타임 중 함수 실행 순간에 stack 공간에 메모리 공간이 할당되고, 함수 종료시 자동으로 메모리 공간이 해제가 되는데, 동적 할당의 경우에는 런타임 중 new(c++) 또는 malloc(c) 와 같은 키워드로 인해 중간에 메모리 공간이 할당이 되는데, 개발자가 delete 또는 free와 같은 명령어로 해제해 주지 않으면, 프로세스 종료시까지 메모리공간이 살아있기 때..