본문 바로가기

Computer Science

(35)
함수형 프로그래밍 입문 with 람다 대수, 함수형 인터페이스 (Java) 함수형 프로그래밍? 오늘은 함수형 프로그래밍에 대해 알아보겠습니다. 함수형 프로그래밍? 함수로 만들면 함수형 아닌가? 절차지향형 프로그래밍에서는 함수를 사용하니까 지금껏 해왔던게 함수형 프로그래밍이군? 이라고 생각할 수 있습니다.(정확히는 제가 그렇게 생각했습니다..) 먼저 정의부터 알아보겠습니다. 함수형 프로그래밍이란? 하나의 프로그래밍 패러다임으로 정의되는 일련의 코딩 접근 방식 자료처리를 수학적 함수의 계산으로 취급, 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임을 의미 자바는 객체지향 언어입니다. 객체를 정의할 때 상태와 메서드가 결합되어있다는 점이 특징입니다. 절차지향형 언어와 달리 객체 지향 언어에서는 클래스의 서브루틴을 function이라고 부르지 않고 method(행위라고도 합니다)라고..
객체지향 설계 연습(SOLID, GRASP) - 좌표평면 도형 그리기 (Java) 들어가며 객체지향 언어인 자바를 사용할 때, 객체 지향 설계의 중요성에 대해 정말 많이 들었습니다. 그래서 책도 샀습니다. '객체지향의 사실과 오해'라는 책도 읽어보았고 앞으로 '오브젝트'라는 책도 읽어볼 예정인데요, 사실 책 한 권을 읽었음에도 아직 객체지향적으로 사고하고 구현하는 것이 익숙하지 않습니다. 그리고 설계를 했을 때 이 설계가 맞는 것인지에 대한 확신도 없습니다. 물론 설계에 정답은 없겠지만 오답은 존재한다고 생각하기에 이 구조가 좋은 구조인지에 대한 답을 얻기 위해 객체 지향 설계에 대한 이해도가 필요하다는 생각이 자주 드는 요즘입니다. 이번 포스팅의 주제는 따라서 1. 기본 용어 정리 2. 객체 지향적 설계를 위한 5가지 원칙(SOLID) 3. GRASP 패턴 소개 4. 개념을 적용한 ..
반효경 운영체제 - 4. CPU Scheduling CPU Scheduling은 무엇인가? 프로그램 실행은 CPU burst와 I/O burst의 연속이다. CPU burst : CPU만 실행하는 단계 I/O burst : I/O만 실행하는 단계 프로그램의 종류에 따라 CPU burst와 I/O burst의 빈도가 다르다. 사용자가 사용하는 프로그램(Interactive)은 보통 상호작용이 있기에 I/O burst의 빈도가 다르다. 1000*1000 행렬 계산 프로그램 등은 CPU burst의 비중이 높다. 위 그림의 경우 I/O bound job의 빈도는 굉장히 높고, CPU bound job의 빈도는 굉장히 낮았음을 보여준다. I/O가 중간에 끼어들어 CPU를 짧게 쓰는 경우의 job을 I/O bound job이라고 한다. CPU만 오랫동안 쓰는 경우..
프로세스의 메모리 영역 (Heap, Stack) 구현하기 (Java) 저번 포스팅에서는 16비트를 기반으로 한 CPU와 메모리의 프로토 타입을 간단하게 구현해보았습니다. 이번 포스팅에서는 운영체제와 연계하여 프로세스가 실행될 때, 가상 메모리 상에서 어떻게 메모리를 관리하는지 간단하게 구현을 통해 알아보도록 하겠습니다. 프로세스의 메모리 프로세스가 실행되면 운영체제는 프로세스에게 메모리 공간을 할당해주는데요, 물리적인 메모리가 아닌 가상 메모리에서 프로세스 별로 메모리를 관리하는 방식을 프로세스 메모리 구조 모델이라고 합니다. 가상 메모리(Virtual Memory)와 물리 메모리 사실, 가상 메모리는 이번 포스팅의 메인 주제는 아니지만, 프로세스의 메모리를 이해하기 위해 필요하므로 간단하게 알아보겠습니다. [물리 메모리] - 물리적인 메모리 그 자체를 의미합니다. RAM..
미니 16비트 CPU + 메모리 구현해보기 (Java) 안녕하세요, 오늘은 16비트의 CPU와 메모리를 간단하게 자바로 구현해보겠습니다. 구현에 앞서 CPU의 구조와 작동원리를 알아야겠죠. CPU의 기능 CPU는 명령어 인출과 해독을 모든 명령어에 대해 공통적으로 수행합니다. 그리고, 데이터 인출, 데이터 처리, 데이터 저장을 명령어에 따라 필요한 경우 수행합니다. 명령어 사이클의 각 개념은 아래와 같습니다. 명령어 인출 : 기억장치로부터 저장된 명령어를 읽어오는 과정 명령어 해독 : 수행해야할 동작을 결정하기 위해 명령어를 해독하는 과정 데이터 인출 : 데이터가 필요한 경우, 기억/입출력 장치로부터 데이터를 read 데이터 처리 : 데이터에 대한 산술,논리적 연산 수행 데이터 저장 : 처리 과정을 거쳐 얻어진 결과를 저장하는 과정 위 과정을 cpu는 clo..
반효경 운영체제 - 3. 프로세스 관리 프로세스 생성 부모 프로세스가 자식 프로세스 생성 복제 생성을 한다. 1대 n의 관계 구조가 트리형태로 구성된다. 프로세스는 자원을 필요로 한다. 운영체제로부터 받는다. 부모와 공유한다. 자원의 공유 부모와 자식이 모든 자원을 공유하는 모델 일부를 공유하는 모델 전혀 공유하지 않는 모델(원칙) 수행(Execution) 부모와 자식은 공존 자식이 종료될 때까지 부모가 기다리는(wait, blocked) 모델 주소 공간 자식은 부모의 공간을 복사함 (binary and OS data) 자식은 그 공간에 새로운 프로그램을 올림 유닉스의 예 fork() 시스템 콜이 새로운 프로세스를 생성 부모를 그대로 복사 (OS data except PID + binary) 주소 공간 할당 fork 다음에 이어지는 exec ..
반효경 운영체제 - 2.2 쓰레드 쓰레드의 정의 “A thread (opr lightweight process) is a baic unit of CPU utilization.” Thread의 구성 program counter - 작업 위치 register set - CPU의 작업 공간 stack space - 작업 위치에 따른 함수 호출 순서 Thread가 동료 thread와 공유하는 부분(task) code section data section OS resources 전통적인 개념의 heavyweight process는 하나의 thread를 가지고 있는 task로 볼 수 있다. 쓰레드는 하나의 프로세스에서 CPU가 실행하는 곳을 여러개, 프로그램 카운터를 여러개 두어 CPU 수행 단위를 여러 개로 두는 것을 멀티 쓰레드라고 함. 동일한..
반효경 운영체제 - 2.1 프로세스 프로세스의 개념 프로세스의 문맥 CPU 수행 상태를 나타내는 하드웨어 문맥 Program Counter - 어디까지 실행했는가? 각종 Register 프로세스의 주소 공간 stack, data, code 등 메모리에 담겨있는 내용 프로세스 관련 커널 자료 구조 PCB (Process Control Block) Kernel stack System call 발생 시 프로세스 별 별도의 스택프로세스 관련 커널 자료 구조 프로세스의 상태 프로세스는 상태가 변경되며 수행된다. Running CPU를 잡고 instruction을 수행 중인 상태 Ready CPU를 기다리는 상태(메모리 등 다른 조건을 모두 만족) Blocked (wait, sleep) CPU를 주어도 당장 instruction을 수행할 수 없는 상..