분류 전체보기
[Operating Systems] 프로세스와 쓰레드
프로세스와 쓰레드에 대해 알아보자. # 프로세스(Process) 먼저, 프로세스란 실행 중인 프로그램을 의미한다. 프로세스는 디스크로 부터 메모리에 적재되어 CPU 할당을 받을 수 있게 되며, 운영체제로 부터 주소 공간, 파일, 메모리 등을 할당받는다. 이러한 프로세스의 특징으로는 다음과 같다. 프로세스는 각각 독립된 메모리 영역을 할당받는다 (아래의 메모리 구조 참고) 기본적으로 프로세스당 최소 1개의 쓰레드(메인 쓰레드)를 가지고 있다. 각 프로세스는 독립적인 메모리 공간에서 실행되므로 다른 프로세스에 접근이 불가능하다. 프로세스 간 정보를 주고받으려면 IPC(Inter-Process Communication)를 사용해야 한다. (파이프, 공유 메모리, 소켓 등을 이용한 통신) 프로세스의 메모리 구조..
[Operating Systems] 인터럽트(Interrupt)
OS의 인터럽트를 알아보자. # 인터럽트 인터럽트란 CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치에 예외 상황이 발생하여 처리가 필요할 경우에 CPU에게 알려 처리할 수 있도록 하는 것을 의미한다. 예를 들어, CPU를 점유한 프로그램이 프린터에 명령을 내려 프린팅을 요청해야 하는 상황을 가정해 보자. 만약, 프린터가 준비완료될 때까지 기다린다면 가장 비싼 자원인 CPU가 낭비되게 된다. 낭비를 막고 사용 효율을 높일 수 있는 방법은 프린터가 준비되면 CPU에게 준비됐음을 알리는 신호를 보내고, 그전까지 CPU는 다른 작업을 계속 수행하는 것인데 이것이 바로 인터럽트 메카니즘이다. 현대의 운영체제는 이러한 인터럽트에 의해 구동되는데, 운영체제는 인터럽트가 들어와야 CPU를 점유하여 사..
[데이터 중심 애플리케이션 설계] 데이터 모델과 질의 언어
데이터 중심 애플리케이션 설계를 독파하며 정리하는 글입니다. 데이터 모델은 소프트웨어 개발에서 중요한 부분임. 소프트웨어가 어떻게 작성됐는지 뿐만 아니라, 해결하려는 문제를 어떻게 생각해야 하는지에 대해서도 영향을 미치기 때문. 또한, 데이터 모델은 그 위에서 소프트웨어가 할 수 있는 일과 할 수 없는 일에 영향을 주므로 애플리케이션에 적합한 데이터 모델을 선택하는 작업이 상당히 중요함. # 관계형 모델과 문서 모델 오늘날 가장 잘 알려진 데이터 모델은 관계형 모델을 기반으로 한 SQL임. SQL에서 데이터는 테이블(table)이라 불리는 관계(relation)로 구성되고, 각 관계는 로우(row)라 불리는 순서 없는 튜플(tuple)의 모음이다. 관계형 데이터 베이스의 근원은 비즈니스 데이터 처리에 있..
[Java] Stream API
Java 8에서 큰 변경점 중 하나인 Stream API를 공부해 보자. (스크립트 언어를 주로 쓰다 Java로 넘어오니 답답한 부분들이 많았는데 조금이나마 해소되었다 :D) # Stream 이란? Java에서는 많은 양의 데이터를 저장하기 위해 배열이나 컬렉션을 사용한다. 하지만, 이렇게 저장된 데이터에 접근하려면 반복문(for, while)이나 반복자(iterator)를 사용해야만 했는데, 이는 너무 장황할뿐더러 재사용이 거의 불가능하다. 또한, 내가 Java를 처음 공부하며 킹 받았던 부분인데, 각 컬렉션 클래스마다 같은 기능의 메서드가 중복 정의 되어있다. List를 정렬할 때는 Collections.sort()를 쓰고, 배열을 정렬할 때는 Arrays.sort() 쓰고?! 이러한 문제점들을 해결..
[데이터 중심 애플리케이션 설계] 신뢰성, 확장성, 유지보수성
데이터 중심 애플리케이션 설계를 독파하며 정리하는 글입니다. 요즘의 애플리케이션은 CPU의 성능보다 데이터의 양, 데이터의 복잡도, 데이터의 변화 속도가 문제이며, 필수 요소는 다음과 같다. 애플리케이션의 필요 요소 구동 애플리케이션이나 다른 애플리케이션에서 나중에 다시 데이터를 찾을 수 있게 데이터를 저장함 (데이터 베이스) 읽기 속도 향상을 위해 값비싼 수행 결과를 기억함 (캐시) 사용자가 키워드로 데이터를 검색하거나 다양한 방법을 통해 필터링할 수 있게 제공함 (검색 색인, search index) 비동기 처리를 위해 다른 프로세스로 메시지를 보냄 (스트림 처리, stream processing) 주기적으로 대량의 누적된 데이터를 분석 (일괄 처리, batch processing) 또한, 소프트웨어..
[Operating Systems] 컴퓨터 시스템 구조
컴퓨터 시스템 구조를 이해해 보자,, 컴퓨터는 CPU와 Memory로 구성되며, 그 외 디스크, 키보드, 프린터, 모니터 등과 같은 I/O 장치들로 구성된다. # CPU(Central Processing Unit) 두말할 것도 없다. 컴퓨터의 핵심 두뇌. 메모리에 적재된 instruction들을 실행하고 끝나면 interrupt를 체크하는 과정을 반복 수행한다. interrupt line : CPU는 Memory와 일을 하는 소울 메이트다. 헌데 만약 속도가 느린 I/O 장치와 일을 해야 할 경우 Device controller에게 일을 시켜놓고 CPU는 다음 업무를 처리한다. 이후 Device controller는 실행한 결과(ex. 키보드로 입력한 문자열)를 자신의 local buffer에 저장한 후..