728x90
반응형

CS Interview 37

교착상태, Deadlock

정의 일련의 프로세스들이 서로가 가진 자원을 기다리며 blocking된 상태 동기화와 관련이 깊은 것이다. Deadlock은 결국 서로의 Event를 기다리면서 무한하게 대기하는 상태를 말한다. **여기서 Event는 자원의 할당과 해제를 의미한다. 발생하는 이유 4가지가 있다. 1. Mutual Exclusion, 상호 배제 매 순간 하나의 프로세스만 자원을 사용 가능 A자원이 B자원 점유와 상관없이 자원을 쓸 수 있다면 당연히 무한 대기 상태는 나오지 않을 것이다. 2. No Preemption, 비선점 프로세스는 자원을 스스로 내어놓는 것만 허용된다. -> 빼앗기지 않는다. 자원을 빼앗을 수 있다면 당연히 deadlock은 나오지 않았다. 3. Hold and Wait, 점유 대기 자원을 가진 프로..

CS Interview 2021.11.01

(A)Synchronous 그리고 (Non)-Blocking

비동기, Asynchronous 와 동기,Synchronous 블로킹,Blocking 과 논 블로킹 Non-Blocking I/O 작업은 user space에서 직접 수행할 수 없기 때문에 user process가 kernel에 I/O 작업을 '요청'하고 '응답'을 받는 구조다. 응답을 어떤 순서로 받는지(synchronous/asynchronous), 어떤 타이밍에 받는지(blocking/non-blocking)에 따라 여러 모델로 분류되는 것이다. 일반적으로 4가지 개념에서 알아보자. 비동기 프로그래밍, 동기 프로그래밍이라는 말을 많이 듣는다. 우선 동기 작업이란 한 번에 하나씩 수행되는 것을 의미한다. 즉, 해당 작업이 끝나기 전까지는 현재 진행중인 작업 외의 다른 작업을 수행하지 못함을 의미한다...

CS Interview 2021.10.22

Paging, 페이징이란?(+단편화)

Paging 기법은 가상메모리의 기법에서 더욱 효율적이게 메모리를 관리하는 것이다. 가상 메모리에서는 해당 프로세스의 관련된 데이터 모두를 적재하는 것이 아니다.라고 말했다. 단순히 레지스터에 시작주소 값을 담아 사용하기에는 연속된 메모리영역이 필요하다. 하지만 연속된 메모리영역을 확보하는 것은 무척이나 힘든 일이기 때문에 이제 프로세스의 물리 주소 공간이 연속되지 않아도 되는 메모리 관리 기법인 페이징을 쓰는 것이다. 페이징이란? 페이징은 virtual memory를 page로 나누는 기법을 말한다. 일반적으로 물리메모리는 동일한 크기의 frame으로 논리메모리는 동일한 크기의 page로 나눈다. **page size는 하드웨어에 의해 결정된다. 페이징이 작동하는 원리 page table을 사용하여 논..

CS Interview 2021.10.10

삽입 정렬, Insertion Sorting 에 대하여

우리가 가장 먼저 정렬을 배울 때 배우는 삽입정렬. 그것에 대해서 알아보자 입력으로는 n 개의 수열이 주어지고 출력은 n개의 수열들이 정렬된 채로 나오기를 원한다. 아래와 같이 하는 것이 삽입 정렬을 적용하는 방법이다. 위와 같은 방식은 어떤 식으로 구현해야 할까?? 우선 pseudo code로 봐보자 조금만 프로그래밍 공부를 했다면 프로그램이 어떻게 작동하는 지는 알 것이다. 하지만 이를 추상화시켜서 설명하는 것은 어려울 수 있다. 다시 말하면 삽입 정렬의 코드를 보여줄 수는 있지만 삽입 정렬이 뭐냐고 물어보면 정확하게 답하기 어려운 이유가 그렇다. 그렇다면 한 줄씩 뜯어서 살펴보자. 첫 번째 2번째 원소부터 n번째 원소까지 끝까지 조사를 한다. 두 번째 조사를 하는 해당 원소는 key가 된다. 세 번..

CS Interview 2021.09.15

CPU Bound와 I/O Bound의 차이

CPU Bound 프로세스는 I/O보다 연산으로 이루어진 CPU Burst 가 큰 프로세스를 의미한다. I/O Bound 프로세스는 I/O가 많은 즉, I/O Burst 가 큰 프로세스를 의미한다. 여기서 Bound를 ~위주의 라고 해석하면 쉽게 알아들을 수 있다. I/O Bound 프로세스는 예를 들어 게임이 있겠다. 항상 사용자 입력을 필요로 하니까 CPU Burst 와 I/O Burst - 실제 프로그램은 CPU 와 I/O 가 번갈아가면서 작업이 이루어지게 된다. CPU Burst 와 I/O Burst 는 각각이 실행되는 시간을 의미 CPU Burst CPU 명령을 실행하는 시간 I/O Burst I/O 를 요청한 뒤 기다리는 시간

CS Interview 2021.09.09

Deep Copy vs Shallow Copy, 얕은 복사와 깊은 복사

같은 복사지만 다른 복사인 2가지 알아보자 여기서는 객체, Object의 복사를 뜻한다. 대체적으로 얕은 복사는 객체의 참조값을 복사하고 깊은 복사는 객체의 값을 복사한다고 알려져있다. 즉, Reference vs value의 차이라는 얘기다. C++에서는 조금 다르게 설명한다. 다시 조금 더 자세히 설명하면 객체에 대해서 얕은 복사는 모든 멤버 필드 값들을 복사하는 것이다. 필드 자체가 값일 경우 동작하지만 동적으로 할당된 메모리를 가리키는 포인터의 경우 그렇지 않을 수 있다. 때문에 포인터는 복사되지만 포인터가 가리키는 메모리는 복사되지 않기 때문에 원래 필드의 객체와 복사본 두가지 모두 동적으로 할당된 메모리를 가리키게 된다. **C++ 에서 디폴트로 되어있는 복사 생성자와 할당 연산자는 얕은 복사..

CS Interview 2021.09.01

Storage Classes, 기억 영역 분류 (변수 선언)

뭐 대단한 것은 아니다. 기억 영역 분류라하면 정말 어색한데..? 쉽게 말하면 해당 선언이 프로그램 실행 중에서 얼만큼 지속되는지를 아는 것이다. 예를 들면 static은 프로그램 시작부터.. 종료까지 유지된다 느낌이다. 알아보자 자동 기억 영역, Auto Storage Class 기본 기억 영역으로 자동변수라고 말을 한다. 'auto' 키워드를 사용하며 선언이 가능하다. **실제로 사용하는 경우는 거의 없다고 보면 된다. 그냥 선언하면 auto 로 선언한 것과 마찬가지니까. 자동변수들은 함수가 호출될 때 자동으로 생성되고 함수가 종료될 때 제거된다. 지역변수 특성을 갖는 것이다. 그렇다면 main 함수의 지역변수들은 뭘까? main 함수 내에세만 사용되더라도 프로그램 전체 실행시간 동안 살아있다. ma..

CS Interview 2021.09.01

해시 테이블, Hash Table 의 장단점 및 한계

해시태그라 불리는 # 그렇다면 해시 테이블은 뭔지 알까? 수많은 자료 구조들 중 하나로 속도가 빠른 자료구조로 알려져 있다. 한 번 알아보자 해시 테이블은 기본적으로 Key- Value 시스템을 가지고 있다. key는 value를 찾는 수단이고 우리가 찾는 것은 value이다. 사전을 생각해보면 쉽다. "배추" 의 정의는 배추를 찾아야 그 밑에 설명이 있다. 우리가 필요한 것은 배추라는 단어가 아니라 배추가 뭔지이다. 해시 테이블의 적합하지 않은 데이터들도 있다. 정렬된 데이터가 필요하거나, 멀티 미디어 데이터를 저장할 때 혹은 키의 길이가 길거나 가변적이어서 키에 대한 검색이 필요할 때 데이터의 키가 유일하지 않을 때 등이 있다. 해시 테이블은 O(1)의 시간복잡도를 가진다고 알려져 있다. ?? 딱봐도..

CS Interview 2021.08.26

절차지향 프로그래밍 vs 객체지향 프로그래밍 비교

이것이 도대체 프로그래밍에 관해 무슨 상관이 있나? 라고 생각하기도 하지만 컴퓨터가 처리하는 방식과 사람이 생각하는 방식의 차이를 공부한다고 생각하면 조금이라도 더 배울 맘이 생긴다라고 생각했다. 그러므로 알아보자 절차지향 프로그래밍이란 말 그대로 절차에 맞는 프로그래밍으로써 프로그램 전체가 순차적으로 처리되게 만드는 기법이다. 컴퓨터의 작업 처리 방식과 유사하기 때문에 시간측면에서 더욱 효율적이다. 다시 말하면 처리해야 할 절차를 우선적으로 생각하며 데이터를 표현할 방법을 나중에 찾는다. 장점으로는 객체나 클래스를 만들 필요 없이 바로 코딩을 하면 작동한다. 같은 코드는 복사하지 않고 바로 호출이 가능하다. 단점으로는 전체적으로 하나만 건드려도 전체가 오류가 생길 수 있고 유지 보수가 쉽지 않으며 특히..

CS Interview 2021.08.25

스택과 힙 메모리 영역, Stack Heap Memory

운영체제를 배웠다면.. 조금이라도 알 수 있지만 시험이 끝나면 까먹는 우리에게 다시 익힐 시간이 필요하다. 다시 알아보자 ** 데이터 영역에는 전역 변수, static variable들이 저장된다. 숫자나 문자열 값인 리터럴도 저장된다. **리터럴이란 소스 코드의 고정된 값을 말한다. 즉, int i = 1; 에서 1을 말한다. -생존 주기, Life Cycle은 프로그램의 시작부터 끝까지 가지고 있다. text영역은 code segment라고도 불리는데 프로그램 코드가 저장되고 절대 변경되지 않는 구역이다. 우선 스택과 힙이 하는 역할에 대해서 알아보자. 스택에는 함수호출, Function Call에서 메모리 할당이 일어난다. 함수 호출에 쓰이는 지역변수, 매개변수가 저장되고 함수호출에 대한 활성 레코..

CS Interview 2021.08.25
728x90
반응형