프로젝트 목표 및 내용 임의의 프로그램을 코드 최적화를 통해 실행 시간을 단축시키는 등 효율을 증가시킨다. 선정한 프로그램을 대상으로 profiling 과정을 통해 다단계 program optimization을 수행하고 결과를 분석한다. 결과 분석(profiling)은 linux 환경에서 gprof툴을 사용하여 진행한다. 직접 최적화를 단계별로 진행하며 각 최적화에 따른 수치 변화의 정도를 직접 확인한다. 최적화 선정 프로그램 이전에 리눅스 수업에서 과제로 작성했던 Monte-Carlo 시뮬레이터를 활용하였다. 멀티 쓰레드를 이용한 프로그램으로, 쓰레드 개수와 반복 횟수를 인자값으로 받아 실행된다. 복잡도를 늘리기 위해 여기에 몇 가지 기초 정렬 알고리즘을 추가하여 프로그램을 구성하였다. 코드는 아래 저..
분류 전체보기
프로세스 간의 통신, IPC는 왜 필요하고 어떻게 이루어지는지에 대해 알아보고자 한다. IPC의 대표적인 모델 Message passing과 Shared memory를 알아보고, 분산 시스템에서 자주 사용되는 RPC에 대해서도 알아보고자 한다. IPC (Inter-Process Communication) 프로세스 간의 통신을 제공하는 이유 프로세스 사이에서 통신을 한다는 의미는 서로 협력하여 좋은 시너지를 낸다는 것인데, 이를 통해 아래의 이점을 얻을 수 있다. Information sharing (정보 공유): 여러 애플리케이션이 동일한 정보에 흥미를 느낄 수 있으므로, 그러한 정보를 병행적으로 접근할 수 있는 환경을 제공한다. Computation sppedup (연산 속도 증가): 만일 특정 태스크..
컴퓨터 네트워크의 핵심은 데이터를 '전달'하는 것이다. Fowarding과 Routing 모두 데이터를 전달하는 건 동일한데, 어떻게 다를까? 한번 알아보자. Forwading과 Routing Forwarding(포워딩) 라우터의 입력 링크부터 알맞은 라우터 출력 링크까지 패킷을 이동시키는 것 local action switching으로 불리기도 한다. Routing(라우팅) 패킷의 출발지에서 목적지까지의 경로를 결정하는 것 global action 다양한 라우팅 알고리즘이 존재한다. 실제로 라우팅 알고리즘에 의해 포워딩 테이블이 만들어진다. 즉, 패킷은 라우팅 알고리즘에 의해 만들어진 포워딩 테이블을 연속적으로 참조하여 출발지에서 목적지까지 운반되어진다. 실생활 예시 San Jose에서 Northamp..
실행해야 하는 프로그램은 많지만 사용할 수 있는 CPU 자원은 한정적이기에 이를 해결하기 위한 방안이 필요하다. 프로세스들의 CPU 쟁탈전, 그것은 Context Switching의 무수한 반복 안에서 일어난다. Context Switching이 무엇인지 알아보자. Context Switching 실제 물리적인 CPU는 한정적이지만, 일반적으로 여러 프로그램이 동시에 실행되는 경우가 많다. 이렇게 프로그램들은 어쨌든 CPU의 자원을 사용해야 하는데, 모든 프로그램들이 원하는만큼 자원을 사용할 수 없으므로 운영체제에서 사용되는 대표적인 기법이 Time sharing이다. 예를 들어 1개의 CPU를 가진 사용자가 A, B, C 3개의 프로그램을 동시에 실행하고 싶다고 하면 단순하게 하나의 프로그램을 1ms씩..
자료구조를 학습하다보면, ADT라는 단어를 자주 접할 수 있다. ADT가 과연 무엇일까? 무엇이길래 여러 자료구조에서 쓰이는걸까? 한번 알아보자. ADT(Abstract Data Type)란? 한마디로는 자료구조를 추상화한 것으로, 사람이 자료를 다루는 관점에서 자료구조를 표현한 것이다. 자료구조의 특징, 속성, operations들을 나타내는 것 어떻게 구현하는지에 대해서는 다루지 않는다. 이렇게만 설명하면 너무 추상적인데, 구체적으로는 다음의 내용들을 명세한다. 저장된 데이터 데이터에 대한 작업들(Operation) 작업 중 발생 가능한 에러 상황들 그리고 이러한 ADT에 구현이 들어가는 순간 Data structure가 된다. Java 또는 OOP를 아는 사람이라면 아래의 내용을 보면 더욱 이해하기..
운영체제라는 과목에서 발생하는 이벤트들의 주체는 프로세스인 경우가 많다. 그래서 프로세스라는 말이 수없이 나오게 되는데, 도대체 이 프로세스가 뭘까? 정리해보고자 한다. Process vs Job(Application) 우선 프로세스의 개념을 알아보려면, Job과 Process의 차이부터 명확하게 짚고 넘어가야 한다. Job(Application, Execution/Image file): 설치된 것(실행중이 아닌 상태) Process: 현재 실행중어서 커널에 등록된 상태 → 커널이 프로세스를 관리한다. 보다시피 Job(App)이 실행되면 커널 내부로 들어와 커널에 등록되고, Process로 불리게 된다. Process vs Processor 그런데 프로세스는 프로세서와 혼동되어 사용되기 쉽다. 확실하게 ..
1. 요구사항 분석 및 목표 설정 지난 2주차에 대한 공통 피드백에 주어졌고, 요구사항 또한 추가되어 구현 단계에서 고려해야 할 요소들이 많아졌다. 그렇다고 뭔가 엄청난 것을 더해야 하는 것은 아니었지만, 지난 2주차도 만만치 않게 느껴졌던지라 이번 주차에서도 주의해야 할 점들에 대해 유의해서 살펴보았다. 그리고 지난 주차에서 아쉬웠던 점들을 열거하자면 다음과 같다. 처음 구현 단계에서 곧바로 클래스를 분리하지 못한 점 테스트 코드를 다양화하지 못한 점 예외 처리에 대해 좀 더 깊게 고민해 보지 못한 점 그래서 이번에는 좀 더 신경써서 위의 것들을 고려하면서도 발전된 형태로 실행해보기 위해 아래의 자그마한 목표들을 설정하였다. 처음부터 OOP 원칙을 준수하며 프로그램 구현하기: 메서드, 클래스의 역할을 ..
지난 10월 19일부터 우아한테크코스 프리코스에 참여하고 있다. 첫 주차는 시험기간 및 과제, 여러 일과 겹쳐 회고를 남기지 못했는데, 이번 2주차와 남은 3, 4주차는 돌아보는 시간을 가지며 소중한 기억들을 기록하고자 한다! 1. 요구사항 분석 및 목표 설정 지난 1주차가 Java 환경 설정, 기본적인 프로그램 구현과 git, 컨벤션을 준수하는 것이 목적이었다면, 이번 주차의 목적은 메서드가 한 가지 일만 하도록 하게 하는 등의 좀 더 객체지향 프로그래밍을 유도하는 요구사항 등이 추가되었다. 개인적으로는 클래스를 분리하여 프로그래밍을 하는 것이 오랜만이고 자바도 오랜만에 사용하다 보니 첫 주차에는 무엇보다도 적응하는 데에 목적을 두고 기본적인 프로그래밍 구현, 메서드 분리에 신경을 써서 과제를 수행했다..