전체 글

전체 글

    운영체제(OS) - IPC(Inter-Process Communication), ITC(Inter-Thread Communication)

    Concurrency는 프로그램의 성질이고 parallism은 기계의 성질이다. Concurrency(병행성) - 프로그램 여러 부분들이 순서에 상관없이 부분순서(partial-order)로 수행될 수 있는 능력을 일컫는다. 어떤 프로그램이나 알고리즘이 순서에 상관없이 동시에 수행될 수 있다면 concurrent하다고 말한다. 예를들어 1부터 100까지 숫자를 더하는 과정을 생각해보자면 숫자 100개를 여러 부분 집합으로 나눈 뒤 동시에 부분합을 구한다. 그리고 이 부분합을 다시 더하면 원래 얻고자 하는 값을 얻을 수 있다. 이 때 이 알고리즘을 concurrent하다고 말한다. 그런데 이 알고리즘이 정말 물리적으로 병렬로 돌아갈지 아닐지는 이 알고리즘이 어떤 하드웨어 위에서 돌아가는지 알아야 확답을 할..

    운영체제(OS) - 스레드(thread)

    스레드: 실행흐름(thread of execution)을 줄려서 스레드라 부름. 프로세스 1개당 1개의 스레드 프로세스 1개당 여러개의 스레드 프로세스와 스레드의 차이 프로세스: 프로세스는 프로세스가 새로운 프로세스를 생성하면 각 각 독립적인 메모리 영역을 소유한다. 이는 코드, 전역변수, 지역변수 모두에 해당한다. 스레드:  새로운 스레드를 생성 할 경우 부모와 자식은 stack(지역변수)만 다르고 독립적인 데이터 영역을 소유한다. 하지만 이외에 전역변수와, 코드는 같은 메모리 영역을 공유한다. 프로세스와 스레드 관련 함수. 프로세스: - fork() - exit() - waitpid() 스레드: - pthread_create() - pthread_exit() - pthread_join() - pt..

    정처기 - 2022년 03월 05일

    1. User Interface 설계시 오류 메세지나 경고에 관한 지침으로 가장 거리가 먼 것은? 1. 메세지는 이해하기 쉬워야 한다. 직관성(Intuitiveness): 누구나 쉽게 이해하고, 쉽게 사용할 수 있어야 함. 2. 오류로부터 회복을 위한 구체적인 설명이 제공되어야 한다. 유효성(Effectiveness): 정확하고 완벽하게 사용자의 목표가 달성될 수 있도록 제작해야 함. 3. 오류로 인해 발생 될 수 있는 부정적인 내용을 적극적으로 사용자들에게 알려야 한다. 학습성(Learnablity): 초보와 숙련자 모두가 쉽게 배우고 사용할 수 있게 제작해야 함. 4. 소리나 색의 사용을 줄이고 텍스트로만 전달하도록 한다. 유연성(Flexibility): 사용자의 인터랙션을 최대한 포용하고, 실수를 ..

    운영체제(OS) - 프로세스(2)

    Running: CPU를 실제로 사용중인 상태 Ready: 언제든 실행 가능하지만 CPU는 다른 프로세스에 의해 점유되어 있기 떄문에 기다려야 하는 상태 Blocked(sleep): 외부 이벤트를 기다리고있는 상태 화살표 예) 1: 프로세스가 입력을 받기위해 Blocked상태로 변함 2: Scheduler에 의해 할당된 CPU사용시간을 모두 사용한 경우. 3: 2번 이후, Scheduler에 의해 다시 CPU제어권을 다시 넘겨받은 경우 4. 1번 이후 Input을 받고 CPU제어권을 넘겨받길 기다림. 프로세스 당 유지되는 정보들 PCB, Process Control Blocked 프로세스의 구현 인터럽트가 발생하면 OS의 가장 하위 레벨에서 발생하는일. 1. 인터럽트가 발생하면 2. 하드웨어 적으로 스택..

    알고리즘 - 병합 정렬(Mearge Sort)

    병합정렬 - '분할 정복' 방법을 채택한 알고리즘 - O(N * logN)의 시간 복잡도를 가진다. - 하나의 큰 문제를 두 개의 작은 문제로 분할한 뒤에 각자 계산하고 나중에 합친다. 기본 아이디어는 일단 정확히 반으로 나누고 나중에 정렬한다 계속 반으로 나누어서 한 개씩 남을 때 까지 나눈다. 예를 들어 a = { 8, 3, 4, 5, 1, 3, 2, 5} 이란 배열이 있을 경우 반을 나눌 경우 8 3 4 5 1 3 2 5 또 나눌 경우 8 3 4 5 1 3 2 5 또 반을 나눌 경우 8 3 4 5 1 3 2 5 한 개씩 남게된다. 다 나눴을 때 합치게 된다. 합치게 되는 과정은 보통 2의 배수만큼 합친다. 첫 번째 병합 첫 번째 합칠 때는 두 개씩 합치는데 합치면서 정렬을 하게 된다 8 3 4 5 ..

    알고리즘 - 힙 정렬(Heap Sort)

    우선 힙 트리를 알고 가야한다. 출처: 동빈나 힙 트리 힙 트리는 트리 자료구조에서 자식노드보다 부모노드가 큰 상태를 뜻한다. 최대힙과 최소힙의 다른점은 점점 내려갈수록 값이 커지는가, 작아지는가 차이지만 모두 균일성을 유지해야 한다. 완전 이진트리 완전 이진트리는 왼쪽부터 채워나간다. 완전 이진트리는 배열에 넣게되어도 유휴 공간이 발생하지 않는다. 아래와 같은 이진트리가 있을경우 A번 노드부터 L번 까지의 노드에 번호를 매긴다면 아래와 같다. 이를 보고 추리한다. n노드의 부모 -> n / 2 (나머지는 버림) n노드의 왼쪽 자식노드 -> n * 2 n노드의 오른쪽 자식노드 -> n * 2 + 1 heapify heapify는 하나의 노드에 대해 수행한다. 자식노드와 자신을 비교해 자식노드에 더 큰 수..

    알고리즘 - 쉘 정렬(Shell's Sort)

    쉘 정렬은 삽입 정렬의 개선판. 삽입 정렬을 이해하고 있어야 한다. 삽입정렬 https://clamp-coding.tistory.com/entry/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%82%BD%EC%9E%85-%EC%A0%95%EB%A0%ACInsertionSort 알고리즘 - 삽입 정렬(InsertionSort) 삽입 정렬) 두 번째 원소로 시작해서 그 앞의 원소들과 비교하여 삽입할 위치를 지정한 후, 원소를 뒤로 옮기고 지정된 자리에 자로를 삽입하여 정렬하는 알고리즘. 해당 배열을 오름차순으로 clamp-coding.tistory.com 쉘 정렬) 쉘 정렬은 갭의 크기가 줄어들면서 정렬되는 알고리즘이다. 예를 들어 n개의 값을 가지고 있는 배열이 있다면, 처음 g..

    알고리즘 - 삽입 정렬(InsertionSort)

    삽입 정렬) 두 번째 원소로 시작해서 그 앞의 원소들과 비교하여 삽입할 위치를 지정한 후, 원소를 뒤로 옮기고 지정된 자리에 자로를 삽입하여 정렬하는 알고리즘. 해당 배열을 오름차순으로 정렬한다면. 두 번쨰 요소를 시작으로 key이전의 요소들과 비교를 한다. 7보단 5가 더 작으므로 7을 밀고 5를 삽입한다. 2번째 요소를 정렬했기 때문에 3번쨰 요소인 1을 이전 요소들과 비교 시작. 7보다 1이 작기때문에 7을 이동, 1을 삽입. 2회전의 결과이다. 이 이후로도 같은 작업을 이어간다. 2번째 요소부터 시작하지만 1번째 요소까지 계속 비교하며 N to 1 까지 비교해나간다. 삽입 정렬의 특징 - 배열 내에서 교환하는 방식으로, 공간복잡도는 O(1)이다. 추가적인 부분은 원소를 교환할때 사용하는 임시요소정..

    운영체제(OS) - System Call

    시스템 호출(System Call) - 프로그램과 운영체제가 상호작용하기 위한 수단. - 프로그램한테 보여지는 운영체제 인터페이스 - System Call을 통해 프로그램은 필요로 하는 서비스를 운영체제 커널에 요청한다. 시스템 호출과 함수 호출 - 둘 다 요청한 사항을 수행하고 원래 프로그램으로 복귀 한다는 점은 같다. - 시스템 호출: 유저 모드(user mode)에서 커널모드(kernel mode)로 전환이 일어남. - 함수 호출: 유저 모드에서 계속 수행 시스템 호출 방법은 운영체제/기계마다 다르다. 어셈블리 언어(기계어) 수준에서 사용가능하며 고급언어(C언어) 수준에서는 시스템 호출로 이어지는 라이브러리가 제공된다. System Call의 일종인 File Management 해당 함수들은 운영체..

    운영체제(OS) - 운영체제란

    컴퓨터 시스템 컴퓨터 시스템은하드웨어 위에 운영체제가 작동한다 그 운영체제는 User interface frogram이 작동하며 그 위에 우리가 사용하는 프로그램들이 동작하는 식으로 운영된다 운영체제는 확장된 기계로서 지저분한(상세한) 하드웨어들을 감추고 추상화되고 깔끔하며 직관적이고 편리한 모습들을 사용자에게 제공해준다. 또한 자원 관리자의 역할을 한다. 각 프로그램은 시간적 측면에서 자원을 공유하고, 공간적 측면에서 자원을 공유한다. 시간적 측면에서 자원을 공유한다. -> CPU, printer 공간적 측면에서 자원을 공유한다. -> Memory 운영체제를 통해 한개의 CPU가 여러개의 프로그램에 접근할 수 있는 스케쥴링 역할을 하기 때문이다. 다중 프로그래밍: 실선은 CPU를 사용중인 구간, 점선..