본문 바로가기

전체보기96

OS Structures & Linux Overview 저번에는 OS에 대해 알아봤다면 이번에는 '어떻게 OS를 설계하고 구현하는지'와 'OS의 내부 구성 방법'에 대해 알아볼 것이다. 그리고 OS 중 Linux에 대해서도 알아보자. OS Design and Implementation 일단 OS를 설계하고 구현하는데 있어서 최선/절대적인 답은 없다. 그러나 일부 접근 방식은 성공적인 것으로 이미 입증되었다. 그리고 서로 다른 OS의 내부 구조는 매우 다양할 수 있다. 그래서 우리는 목표 및 사양을 정의하여 설계를 시작해야 한다. 왜냐하면 하드웨어나 시스템의 유형의 선택에 영향을 받기 때문이다. 설계 요구사항을 특정할 때, 다음과 같은 사항들이 고려될 수 있을 것이다. User goals: OS는 사용하기 쉽고, 배우기 쉽고, 신뢰할 수 있고, 안전하고, 빨라.. 2021. 11. 12.
Greedy Algorithm Design Pattern 2(탐욕 알고리즘) 이전 게시글에 이어서 Greedy Algorithm(탐욕 알고리즘, GA)의 또 하나의 예시인 허프만 이진 코드 트리(Huffman Binary Code Tree)에 대해 알아보자. 그리고 헷갈릴 수 있는 Dynamic programming(DP)과 GA의 차이점에 대해서도 살펴보자. Huffman Binary Code Tree 해당 알고리즘은 데이터 파일(텍스트, 오디오, 이미지 등)을 효율적으로 인코딩할 때 사용된다. 즉 최대한 압축률을 크게 하는 것이 목적이다. 우선 파일을 어떤 방식으로 나타내는지 부터 알아야겠다. 파일을 나타내는 일반적인 방법은 이진 코드(bit)를 사용하는 것이며 문자는 고유한 코드 워드(이진 문자열)로 표시된다. Type of Binary Code 여기서 이진 코드의 유형을 .. 2021. 11. 8.
Operating Systems(OS) Overview Windows, Mac, Linux 등이 OS라는 것은 알고 있었지만 OS가 정확히 무엇인지에 대해 생각해 본 적은 없었다. 중간고사 이후에는 수업에서 OS에 대한 내용을 다룬다. OS overview에서는 OS란?, OS service와 operation, System Call에 대해 살펴보자. What is an Operating System? fig 1은 전체적인 컴퓨터 시스템을 나타낸 것이다. 확인할 수 있듯이 4개로 나눠볼 수 있다. Users(사용자): 사람, 기계, 다른 컴퓨터 등에 해당한다. users는 computing problems를 해결하길 원한다. Application programs: 컴퓨터 리소스를 사용하는 users의 computing problems를 해결한다. OS: 다양.. 2021. 11. 5.
Linkers and Loaders 이전까지는 어셈블러에 대해 알아보았다. 어셈블러는 어셈블리어를 기계가 이해할 수 있는 기계어(object code)로 변환시키는 역할을 한다고 했다. 이제 그 다음 과정을 위해 사용되는 링커(Linker)와 로더(Loader)에 대해 알아보자. fig 1을 통해 C와 같은 고급 언어 프로그램의 번역 계층을 다시 살펴보자. 번역 과정의 속도를 높이기 위해 일부 단계를 건너뛰거나 결합하기도 하지만 기본적으로 4단계를 따른다. 먼저 어셈블리 언어 프로그램으로 컴파일 어셈블러를 통해 기계어로 된 객체 모듈로 조립된다. 링커는 여러 모듈을 라이브러리 루틴과 결합하여 모든 참조를 확인한다. 로더는 기계어 코드를 프로세서가 실행할 적절한 메모리 위치에 배치한다. 여기서 링커와 로더에 대한 내용은 당연히 생소할 것이다.. 2021. 11. 1.