Array 같은 자료형의 구성요소가 직선 모양으로 연속하여 줄지어 있는 단순 자료구조이다. 논리적 저장 순서와 물리적 저장 순서가 일치한다. 인덱스로 해다 원소 접근이 가능하다 찾고자 하는 원소에 대해서 인덱스 값만 안다면 Big-0(1)에 해당 원소로 접근 할 수 있
알고리즘 실행하는데 필요한 자원을 예측하는 것.여러 측정 관심대상이 있지만 대부분 측정 대상은 계산 시간.수행시간 : 기본 연산 개수 or 실행된 단계의 횟수\-> 각 명령문 수행 시간의 합알고리즘 수행시간 : 주어진 문제의 입력 크기가 다양해서 최악, 최상, 평균 적
월드와이드웹(WWW)과 같은 분산 하이퍼 미디어 시스템을 위한 SW 아키텍처의 한 형식으로 자원을 정의하고 자원에 대한 주소를 지정하는 방법 전반에 대한 패턴REpresentational State Transferful이 붙어서 "~한 API"라는 의미로 많이 쓰인다.
둘 다 HTTP 프로토콜을 이용하여 서버에 무언가를 요청할 때 사용하는 방식이지만때에 따라 둘의 특징에 맞게 이해하여 기술의 목적에 맞는 용도 사용을 위해 둘 간의 차이를 이해할 필요가 있다.HTTP Request Message의 Header 부분의 url에 담겨 전송
스레드와 프로세스에 대한 정리가 끝난 후, 더 궁금해진 부분들과 관련성 있는 이야기들을 따로 정리하고 싶었다.그래서우선, 스택은 함수 호출 시 전달되는 인자, 복귀 주소값 및 함수 내에서 선언하는 변수 등을 저장하기 위해 사용 되는 메모리 공간이다.✅ 스택 메모리 공간
안드로이드 개발을 하다보면 스레드에 대해 너무도 중요하게 생각이 된다. UI 스레드를 단일로 처리하여 Main Thread에서만 UI변경이 되기에 스레드 관리는 매우 중요하다. 그렇지만, 이러한 중요성은 안드로이드 개발에 국한된 이야기만은 아니다. 그래서 오늘은 프로
Context Switching ⁉️ CPU는 한번에 하나의 프로세스만 처리할 수 있다. 여러 프로세스를 처리해야 하는 상황에서 현재 진행중인 Task(프로세스,스레드)의 상태를 PCB에 저장하고 다음에 진행할 Task의 상태값을 읽어 적용하는 과정이다. 다른 프로세스
가볍게 쉬운 비유 예시를 먼저 소개하겠다.해야할 일이 빨래, 설거지, 청소 3가지가 있다. 이 일들을 동기적으로 처리한다면 빨래 -> 설거지 -> 청소이다.비동기적으로 처리한다면 빨래는 업체에 맡기고, 설거지는 대행 업체에 시키고 청소 역시 대행 업체에 시킨다. 어떤
직렬화 :: Serialize객체를 바이트 스트림으로 바꾸는 것. \* 바이트 스트림\*\* : 8비트의 바이트 단위로 입출력하는 클래스, 이진 데이터를 읽고 쓰기 위하여 사용.객체에 저장된 데이터를 스트림에 write하기 위해 연속적인 serial 데이터로 변환하는
개발자가 작성한 소스코드를 '한 문장씩 읽고' 기계어로 바꿔준다. 그 후 변환된 코드를 실행한다.전체 소스코드를 '모두' 기계어로 파일로 바꾸고 그 후에 변환된 코드를 실행시킨다.Build시에, interpreter는 별 일 하지 않지만 Compiler는 기계어 소스
Object Oriented Programming프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호 작용을 통해 로직을 구성하는 프로그래밍 방법.코드의 재사용성이 높다. 👉🏻 다른 클래스를 가져와서 사용할 수
네트워크를 공부해 본 적 있다면 무조건 몇번씩 봤을 그림이다.(애프스트앤드프..)OSI7Layer를 깊게 살펴보기 전에 왜 저건 7개로 나누어졌는지 부터 생각해보자.중요한 목적은 표준과 학습 도구라 할 수 있다.표준화를 통해 이질적인 포트 문제나 프로토콜 등으로 인한
TCP/IP !? 인터넷 프로토콜 표준이 제정될 때, 지금처럼 두개로 분리되어 제안되었다. 인터넷의 설계 기준과 관계를 보면 IP가 허리인 상태 = 모래시계 형태가 된다. 이런 디자인으로 어떤 통신 관련 하드웨어 기술이라도 IP만 있으면 되고 어떤 소프트웨어라도 IP
위키 백과에서 아래처럼 설명하고 있다.TCP/IP는 패킷 통신 방식의 인터넷 프로토콜인 IP (인터넷 프로토콜)와 전송 조절 프로토콜인 TCP (전송 제어 프로토콜)로 이루어져 있다. IP는 패킷 전달 여부를 보증하지 않고, 패킷을 보낸 순서와 받는 순서가 다를 수 있
웹 서버와 클라이언트 간 문서를 교환하기 위한 통신 규약웹에서만 사용하는 프로토콜로 TCP/IP 기반으로 서버와 클라이언트 간 요청과 응답을 전송한다. 웹 브라우저와 웹 서버의 통신에는 IP가 필요하고 TCP를 기반으로 하는 통신이기에 TCP/IP 통신이라고 말한다.T
우선, IP주소와 도메인에 대해 살짝 짚고가자.IP주소란 많은 컴퓨터들이 인터넷 상에서 서로를 인식하기 위해 지정받은 식별용 번호이다.현재는 IPv4버전(32비트)로 구성되어있고, 한번씩 들어본 127.0.0.1 같은 주소이다.시간이 갈 수록 IPv4 주소 부족으로 I
일반적인 큐는 FIFO의 구조이다.먼저 들어간 데이터가 먼저 반환되게 되어 있다.이런 큐의 특성과 약간의 차이가 있는 우선순위 큐는 들어간 순서에 상관없이 일정한 규칙에 따라 우선순위를 정하고 우선순위가 높은 데이터 순서대로 반환되게 된다.병원에서의 응급환자를 생각하자
Java : ArrayListC++ : Vector내부적으로 배열을 사용하여 데이터를 관리한다.인덱스를 가지고 있어서 데이터 검색에 적합하고 속도가 빠르다. \- 시간 복잡도 : O(1)데이터 삽입, 삭제 시에 해당 데이터를 제외한 모든 데이터를 임시 배열을 생성하여
우선, Stack과 Queue는 선형 자료구조이다.나중에 들어온 원소가 먼저 나오는 구조LIFO(Last In First Out)형태의 자료 구조이다.안드로이드에선 액티비티를 관리하는데 스택이 사용된다.시간 복잡도 : O(n)공간 복잡도 : O(n)함수의 콜 스택, 문
이름 그대로 나무를 생각하면 된다.근데 나무를 뒤짚어서 생각하면 된다.요건 나무라고 생각해보면 A는 루트이고 J,K가 맨 위에 있는 나뭇가지이다.🙋♂️ 그렇다면 선형 자료 구조에 배열, 리스트 등도 있지만 트리가 왜 나왔을까?일반 배열에서 삽입, 삭제를 하는데 O(
노드와 다른 노드를 연결하는 엣지를 하나로 모아 놓은 자료 구조.연결되어 있는 객체 간 관계를 표현할 수 있는 자료 구조이다.정점간의 관계를 표현하는 조직도ex)지도, 지하철 노선도의 최단 경로, 전기 회로의 소자들, 도로, 선수 과목 등정점간의 관계를 표현하기에 트리
🗺 Naver Map sdk를 사용하여 지도화면을 개발하던 중, Multithreading을 만나게 되었다.예를들어, 지도에서 카페를 클릭하면 지도 위에 카페 마커가 여러개 그려지게 되는데 뭐 100개 안쪽이면 그냥 그려질 수 있겠다. 근데 만약 이 마커가 100개를
큐는 데이터를 일시적으로 쌓아두기 위한 자료구조로 FIFO(First-In First-Out) 구조.먼저 들어온 순서대로 데이터가 나가지 않고 우선 순위를 먼저 결정하고 그 우선순위가 높은 요소들이 먼저 나가는 자료 구조.힙을 이용하여 구현하는 것이 일반적데이터 삽입
🧐 트리와 그래프를 개별적으로 공부했지만서도 연관 관계를 좀 정리해두고 싶다.2개 이상의 경로가 가능하다.무방향에서 양방향으로도 가능하다.루트 노드 개념이 없고, 부모-자식 개념도 없다.그래프 순회는 BFS, DFS로 이루어져 있다.그래프는 네트워크 모델이다.트리는
서로 다른 값을 가진 key가 해시 테이블의 한 주소에 매핑되는 경우이다.hashing을 해서 삽입하려 했으나 이미 다른 원소가 자리를 차지 하고 있는 상황.이럴 경우, 해싱의 검출 속도를 떨어뜨리고 버킷 크기를 넘어 저장되어 오버 플로우가 발생한다.선형 조사 : 충돌
Hash or HashTable은 내부적으로 배열을 사용해 데이터를 저장한다.해시 알고리즘을 이용해 고유한 인덱스를 얻는다.인덱스를 이용하여 빠른 검색 속도를 갖는다.해시는 다양한 길이를 가진 데이터를 고정된 길이의 데이터로 매핑한 값이다.데이터를 효율적으로 관리하기
Trie !? 일반 트리 자료구조 중 하나 문자열을 key로 사용하는 동적인 Set 또는 연관 배열을 저장하는 트리의 확장된 자료 구조. Digital Tree, Radix Tree, Prefix Tree라고도 불린다. 텍스트 자동 완성 기능과 같이 문자열을 저장하고
동일한 값에 대해 기존의 순서가 유지되는 정렬동일한 값에 대해 기존의 순서가 뒤바뀌는 정렬제일 많은 예시가 카드다. 아래 처럼 7(스페이스), 5(하트), 2(하트), 5(스페이스) 순서이다.안정 정렬을 하게 되면 5(하트)와 5(스페이스)가 위치가 바뀌지 않는다.그럼
1\. 인터프리터 방식원래 인터프리터의 의미는 고급 언어로 작성된 프로그램을 한줄씩 번역해서 OS에서 인식하는 기계어로 변역하는 역할이다.자바 인터프리터는 JAVAC 명령으로 자바 프로그램을 중간 형태인 바이트 코드로 컴파일하고 이를 자바 인터프리터가 한 줄 씩 해석하
CPU가 하나의 프로세스 작업이 끝나면 다음 프로세스 작업을 수행해야 한다.이때 어떤 프로세스를 다음에 처리할 지 선택하는 알고리즘을 CPU 스케쥴링 알고리즘이라고 한다.상황에 맞게 CPU를 어떤 프로세스에 배정하여 효율적으로 처리하는 가가 중요하다. Preemptiv
한정적인 시스템 자원에 여러 스레드가 동시에 접근해서 사용하면 문제가 발생할 수 있다. 이 문제를 방지하기 위해 여러 스레드에게 하나의 자원에 대한 처리 권한을 주거나 순서를 조정하는 기법.실행 순서의 동기화스레드의 실행 순서를 정의하고, 이 순서를 반드시 따르도록 하
프로세스가 절대 일어나지 않을 사건을 기다리는 행위.둘 이상의 프로세스가 다른 프로세스가 사용중인 자원을 동시에 기다리는 상태교착 상태는 하나 이상의 작업에 영향을 주기에 무한 대기나 기아 상태보다 더 심각한 문제를 일으킨다. 상호 배제 : 한 번에 하나의 프로세스/스
Java에는 여러 종류의 Map이 있다.차이를 알고 써야 한다.내부적으로 Entry<K,V>\[] Entry 의 array 로 되어 있다. 해당 array 에 index 는 내부 해쉬 함수를 통해 계산된다.String 은 sun.misc.Hashing.string
페이지가 주기억장치에 저장된 시간을 기준으로 교체될 페이지를 선정하는 기법단점중요한 페이지가 오랫동안 있었다는 이유 만으로 교체되는 불합리주기억장치에 적재되어있는 페이지들이 참조된 횟수를 기준으로 교체할 페이지 선정하는 기법단점참조될 가능성이 많아도 횟수에 의한 방법이
Paging vs Segmentation 가상 메모리를 관리하는 방법이다. 는 메모리에 로드된 즉, 실행중인 프로세스가 가상의 공간을 참조하여 마치 커다란 물리 메모리를 갖고 있는 것처럼 사용할 수 있도록 하는 것이다. 간단하게 말해 실제 메모리 주소가 아닌 가상의 메
TLB !? 변환 우선 참조 버퍼 페이지 테이블이 물리적 기억 장치(주기억장치)에 존재하니까 메모리 엑세스 시마다
프록시 서버 (Proxy Server) !? 인터넷에서 유저를 대신해서 데이터를 가져오는 서버이다. 원래라면 클라이언트가 직접 서버에 접근해서 데이터를 가져와야 하지만 이를 프록시 서버가 대신 해준다. ex) 클라이언트가 naver의 주소를 입력하고 접속을 기다린다.
ArrayList & Vector는 동적인 배열을 사용할 때 주로 사용 된다.현재 Collection Framework에 포함되어 있지만 이전에는 자바의 초기 버전에서 정의한 인터페이스이다.크기가 동적으로 조절이 가능한 동적 배열을 구현한다.배열처럼 정수 인덱스로 배열
데이터를 덧붙일 때마다 배열 혹은 리스트의 크기가 증가한다.하지만 자바 같은 언어에서는 배열의 길이가 고정되어있다.이런 경우, 배열을 만들 때 배열의 크기를 함께 지정해야 한다.동적 가변 크기 기능이 내재되어 있는 배열과 비슷한 자료구조를 원할 때는 보통 ArrayLi
Key, Value로 이뤄진 데이터의 집합key의 중복은 허용되지 않고, Value의 중복은 가능하다.Object와 상당히 유사한 순회 가능한 객체K,V의 형태로 이루어져 있으며, 선언하거나 추가 시 이러한 형태로 값을 넣어주어야 한다.K,V의 형태에서 key 부분이
우리가 스레드를 배우고 여러 질문에 대답을 할 때, 스레드 풀을 배우고 대답하게 된다.이건 쉽다. OS가 요청을 받아서 메모리 공간을 할당해주고 그 메모리에 스레드를 할당해준다. 스레드는 동일한 메모리 영역에서 생성되고 관리되지만, 생성/수거에 드는 비용이 매우 크다!
문맥교환 오늘 얘를 이야기 하고자 하는 것이 아님. 크게는 프로세스와 스레드가 각각 전환 시에 일어나는 현상에서 어떤 게 더 크고 작고 왜 그런지?문맥 전환과 함께 메모리 전환도 이루어진다.Register 메모리 전환이 이루어진다.Process 메모리 할당이 필요하다!
Process는 독립적그렇기에 다른 프로세스에게 영향을 받지도 않는다.(스레드는 프로세스 안에서 자원을 공유하기에 영향을 받는다.)이런 독립적 구조를 가진 프로세스 간 통신 상황에서 가능하도록 해주는 게 IPC이다.프로세스는 커널이 제공하는 IPC 설비를 이용하여 프로
ex1) CPU 코어와 메모리 사이의 병목 현상 완화ex2) 웹 브라우저 캐시 파일은, 하드디스크와 웹페이지 사이의 병목 현상 완화CPU가 주기억장치에서 데이터를 읽어올 때, 자주 사용하는 데이터를 캐시 메모리에 저장한 뒤, 다음에 이용할 때 주기억장치가 아닌 캐시 메
프로그램을 실행하는 도중, 예기치 않은 상황이 발생할 경우 현재 실행중인 작업을 즉시 중단하고, 발생된 상황을 우선 처리한 후 실행 중이던 작업으로 복귀하여 계속 처리하는 것.인터럽트 당한 시점의 레지스터와 PC(Program Counter : 다음 번에 실행할 명령어
OS의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스보통 C,C++과 같은 고급 언어로 작성된 프로그램들은 직접 시스템 호출을 사용할 수 없기에 고급 API를 통해 시스템 호출에 접근하게 하는 방법연관지어 나오는 내용Q.
HW 자원을 각 사용자 어플리케이션에 적절히 분배해주는 것.HW 자원은 CPU, Main Memory, 하드디스크, 키보드, 마우스, 프린터 등이 존재한다.이러한 하드웨어 자원을 사용자 어플리케이션이 요구하거나 OS내의 규칙에의해 적절히 분배하여 컴퓨터의 성능을 최대한
OS에서 CPU자원을 관리하는 프로세스 관리 뿐 아니라 메모리 관리 역시 매우 중요한 사항이다!현재에도 여전히 메모리를 최대한 효율적으로 사용하기 위한 여러 방법들이 연구되고 OS 기능에서 매우 중요한 부분을 차지 한다.이 글은 KOCW 운영체제 강의를 토대로 작성되는
외부 단편화로 인한 메모리 낭비가 심하다.Compaction을 사용하면 외부 단편화를 해결 할 수 있지만 오히려 이로인해 발생하는 오버헤드, 비효율적인 성능으로 사용하기 어렵다.그래서 나온게 페이징이다.hole을 가지고 해결하려 하지 않고 프로세스를 작은 단위로 나눠서
페이징은 프로세스를 물리적으로 일정한 크기로 나눠 메모리에 할당하였다.프로세스를 논리적 내용일 기반으로 나눠 메모리에 배치하는 것을 말한다.세그먼트의 집합으로, 각 세그먼트의 크기는 일반적으로 같지 않다.프로세스를 code, data, stack으로 나누는 것 역시 세