
멀티태스킹과 멀티프로세싱단일 프로그램 실행만약 프로그램을 2개 이상 동시에 실행한다고 가정해보자. 예를 들어서 음악 프로그램을 통해 음악을 들으면서, 동시에 워드 프로그램을 통해 문서를 작성하는 것이다. 여기서는 연산을 처리할 수 있는 CPU 코어가 1개만 있다고 가정하겠다.프로그램의 실행이란, 프로그램을 구성하는 코드를 순서대로 CPU에서 연산(실행)하는 일이다. 위 이미지에서 CPU 코어는 하나이기 때문에 한 번에 하나의 프로그램 코드만 실행할 수 있다. 만약 하나의 프로그램 안에 있는 코드를 모두 완료한 후에야 다른 프로그램의 코드를 실행할 수 있다면 사용자는 매우 불편할 것이다. 바로 이러한 문제를 해결하기 위해 하나의 CPU 코어로 여러 프로그램을 동시에 실행하는 "멀티태스킹" 기술이 등장했다...

취득 계기 그동안 개발자로 근무하면서 AWS가 무엇인지는 알지만, 남들 다 쓰니까 쓴다는 생각으로 사용해왔습니다. 더이상은 이렇게 사용하면 안 되겠다는 생각으로 AWS 책을 구입해서 좀 더 깊게 공부하던 중, 문득 "AWS도 자격증이 있던데 도전이나 해볼까?" 하게 되었습니다. 제 성격상 생각만 하지말고 당장 실천하자는 마음으로 자격증 취득에 도전하게 되었습니다. 공부 방법 인터넷에서 정보를 찾아보니 대부분의 블로그에서 udemy 인강(【한글자막】 AWS Certified Solutions Architect Associate 시험합격!)을 추천하고 있었고, udemy에 접속해보니 마침 운좋게도 99,000원에서 15,000원으로 할인을 하고 있었습니다. 27시간이라는 상당한 런닝타임을 자랑했지만, 공부가..

옵저버 패턴 옵저버 패턴(Observer Pattern)이란, GoF가 소개한 디자인 패턴 중 하나로 관찰 대상이 되는 객체가 변경되면 대상 객체를 관찰하고 있는 옵저버(observer)에게 변경사항을 통지(notify)하는 디자인 패턴을 말한다. 옵저버 패턴을 사용하면 객체 간의 상호작용을 수월하게 하고 효과적으로 데이터를 전달할 수 있다. 옵저버 패턴 구조 옵저버 패턴은 관찰 대상인 서브젝트(Subject)와 이를 관찰하는 옵저버(Observer)로 이루어져 있다. 하나의 서브젝트에는 1개 또는 여러 개의 옵저버를 등록할 수 있다. 서브젝트의 상태가 변경되면 자신을 관찰하는 옵저버들에게 변경사항을 통지한다. 서브젝트로 변경사항을 통지 받은 옵저버는 부가적인 처리를 한다. 옵저버 패턴은 서브젝트와 옵저..

관계형 데이터베이스(RDB)는 사전에 엄격하게 정의된 DB schema를 요구하는 table 기반 데이터를 구조를 갖는데 반해, 비관계형 데이터베이스(NoSQL)는 table 형식이 아닌 비정형 데이터를 저장할 수 있도록 지원한다. RDB는 엄격한 schema로 인해 데이터 중복이 없기 때문에 데이터 update가 많을 때 유리하고, NoSQL은 데이터 중복으로 인해 update 시 모든 컬렉션에서 수정이 필요하기 때문에 update가 적고 조회가 많을 떄 유리하다. NoSQL 기존의 관계형 데이터베이스의 경우에는 단일 기업의 데이터를 다루는데 최적화 되어 있었다. 하지만 최신 데이터들은 꼭 관계형으로 처리할 필요가 없는 경우도 많고, 다뤄야 하는 데이터의 양도 훨씬 많이 커졌다. 즉 빅데이터라고 일컬어..

실제 우리가 사용하고 있는 운영체제에서 가상 메모리를 사용하고 있기 때문에 개발자는 가상 메모리를 이해하는 것이 중요하다. 운영체제에 의해 메모리 관리가 어떻게 이루어지는지, 또 page fault, page 교체 알고리즘은 어떤 것인지에 대해서 알아보자. 가상 메모리 (virtual memory) 가상 메모리는 실제 물리 메모리 개념과 개발자 입장의 논리 메모리 개념을 분리한 것이다. 이렇게 함으로써 개발자는 메모리 크기를 전혀 신경쓰지 않고, 손 쉽게 프로그램을 작성할 수 있게 된다. 운영체제는 가상 메모리 기법을 통해 프로그램의 논리적 주소 영역에서 필요한 부분만 물리적 메모리에 적재하고, 직접적으로 필요하지 않은 메모리 공간은 디스크(Swap 영역)에 저장하게 된다. 요구 페이징 (demand p..

Paging을 알아보기에 앞서 간단하게 논리적 주소와 물리적 주소의 차이에 대해 살펴보자. 논리적 주소 (logical address) 프로세스가 메모리에 적재되기 위한 독자적인 주소 공간인 논리적 주소가 생성된다. 논리적 주소는 각 프로세스마다 독립적으로 할당되며, 0번지부터 시작된다. 물리적 주소 (physical address) 물리적 주소는 프로세스가 실제로 메모리에 적재되는 위치를 말한다. 주소 바인딩 (address binding) CPU가 기계어 명령을 수행하기 위해 프로세스의 논리적 주소가 실제 물리적 메모리의 어느 위치에 매핑되는지 확인하는 과정을 말한다. Paging paging기법은 프로세스의 메모리 공간을 동일한 크기의 page 단위로 나누어 물리적 메모리의 서로 다른 위치에 pag..

IPC (Inter Process Communication) 프로세스는 각자 자신만의 독립적인 주소공간을 갖기 때문에, 다른 프로세스가 이 주소공간을 참조하는 것은 불가능하다. 그러므로 다른 프로세스와 데이터를 주고 받을 수 없다. 하지만, 운영체제는 IPC기법을 통해 프로세스들 간에 통신이 가능하게 해준다. IPC는 크게 공유 메모리 방식과 메시지 전달방식으로 나뉘어진다. 공유 메모리 (shared memory) 공유 메모리 방식에서는 프로세스들이 주소 공간의 일부를 공유하는데, 이 공유한 메모리 영역에 read/write를 통해서 통신을 수행한다. 프로세스가 공유 메모리 할당을 커널에 요청하면 커널은 해당 프로세스에 메모리 공간을 할당해준다. 공유 메모리 영역이 구축된 이후에는 모든 접근이 일반적인 ..

Thread & Multi Thread 쓰레드는 한 프로세스 내에서 실행되는 동작(function)의 단위이다. 각 쓰레드는 속해있는 프로세스의 Stack 메모리를 제외한 나머지 memory 영역을 공유할 수 있다. 멀티 쓰레드란, 하나의 프로세스가 동시에 여러 개의 일을 수행할 수 있도록 해주는 것이다. 즉, 하나의 프로세스에서(실행된 하나의 프로그램) 여러 작업을 병렬로 처리하기 위헤서 멀티 쓰레드를 사용한다. 멀티 쓰레드에서는 한 프로세스 내에 여러 개의 thread가 있고, 각 쓰레드들은 Stack 메모리를 제외한 나머지 영역(Code, Data, Heap) 영역을 공유한다. Stack memory & PC Register 쓰레드가 함수를 호출하기 위해서는 인자 전달, Return Address ..

Milti Process Milti Process란 2개 이상의 프로세스가 동시에 실행되는 것을 말한다. 이 때 프로세스들은 CPU와 메모리를 공유하게 된다. memory의 경우에는 여러 프로세스들이 각자의 memory영역을 차지하여 동시에 적재되는데, 하나의 CPU는 매 순간 하나의 프로세스만 연산이 가능하다. 하지만 CPU의 처리 속도는 상당히 빠르기 때문에 여러 프로세스들이 CPU에서 번갈아 실행되어도 사용자 입장에서는 마치 여러 프로그램이 동시에 실행되는 것처럼 느껴진다. 이처럼 CPU의 작업시간을 여러 프로세스들이 조금씩 나누어 쓰는 시스템을 시분할 시스템(time sharing system)이라고 한다. 메모리 관리 여러 프로세스가 동시에 memory에 적재된 경우, 서로 다른 프로세스의 영역..

collision 이전 포스트에서 알아본 Hash table에서 발생한 collision을 해결하는 방법에는 대표적으로 2가지 방법이 있다. open addressing 방식은 collision이 발생하면 미리 정한 규칙에 따라 hash table이 비어있는 slot을 찾는다. 빈 slot을 찾는 방법에 따라 Linear Probing, Quadreatic Probing, Double Hashing으로 나뉘게 된다. separete chaining방식은 linked list를 이용한다. 만약 collision이 발생하면 linked list에 노드(slot)를 추가하여 데이터를 저장한다. Open addressing Open addressing방식은 collision이 발생하면 미리 정한 규칙에 따라 h..
- Total
- Today
- Yesterday
- Algorithm
- 스프링부트
- leetcode
- 인프런
- 파이썬
- webflux
- 북클럽
- MySQL
- 백준
- 구현
- 코테
- Real MySQL
- mysql 8.0
- 스프링
- 코틀린
- 자료구조
- 노마드
- 리팩토링
- 데이터베이스
- spring boot
- 정렬
- 알고리즘
- Spring
- kotlin
- 스프링 부트
- 그리디
- 릿코드
- 노마드코더
- 문자열
- 김영한
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |