목록Dot-Gabi/Operating System (13)
학사 나부랭이
여태까지 동적 링크 라이브러리, 동적으로 컴파일할 때 필요한 파일이라고 두리뭉실하게 설명했는데, 라이브러리는 다른 프로그램에서 이용하는 함수들을 모아둔 곳이에요. 그러나 DLL은 표준 C 라이브러리 같은 일반 라이브러리의 파일과는 구조나 사용법이 달라요. Static Linking Library 일반 라이브러리는 소스 코드를 컴파일한 결과로 생성되는 오브젝트 파일을 그대로 모아둔 것이에요. 그리고 링커(Linking 단계에서)가 이 일반 라이브러리 파일 중, 필요한 함수가 포함된 오브젝트 파일을 꺼내서 실행 파일에 결합하는게 정적 링크 방식이에요. 정적 라이브러리르 사용하려면 프로젝트 설정의 Link 옵션에 라이브러리를 추가해주거나 #pragma comment(;ib, "asdf.lib")처럼 #prag..
Registry 윈도우의 설정, 정보를 담고 있는 데이터 베이스예요. OS가 시작되거나 사용자가 로그인할 때 메모리에 적재되어요. 그리고 제어판 설정, 파일 연결, 시스템 정체, 설치된 소프트웨어 등을 변경하면 그 변경 사항들이 레지스트리에 저장되죠. 원래 이러한 구성 설정을 담는 곳은 각 프로그램의 ini 파일이었는데 이 파일이 시스템의 여러 곳에 퍼져 있어서 관리가 힘들어서 레지스트리라는 개념이 도입되었어요. +)잠깐! ini(INItialization) 파일은 컴퓨터의 프로그램이나 OS의 설정에 대한 파일의 de facto standard, 텍스트로 이루어져있어요. 레지스트리는 키와 값으로 구성되어있어요. 먼저 키는 폴더와 비슷한데 값과 서브키를 가질 수 있고 이 서브키는 또 서브키를 가질 수 있어..
前触れ OS는 명령어가 구동되는 커널, 프로그램의 명령어를 커널에 전달하는 프레임워크, 커널과 프레임워크 위에서 구동되는 UI로 나뉘어요. 부팅은 일반적으로 커널을 로드하고 프레임워크를 실행시킨 뒤 UI를 실행해서 OS를 시동하는걸 일컬어요 Boot loader 시스템의 하드웨어를 초기화(준비)하고 커널을 메모리에 적재(복사)시켜 실행시켜주는 시스템 프로그램이에요. 컴퓨터를 켜면 롬에 있는 BIOS가 로드되고 그 바이오스는 컴퓨터에 연결된 저장매체(HDD, 부팅 USB 등)에서 설정된 부팅 순서대로 부트로더를 불러와요. 만약 HDD가 첫 번째 부팅 장치라면 바이오스는 HDD의 부트 로더를 로드해요. HDD 파티션 정보는 MBR(Master Boot Record)이라는 HDD의 첫 섹터에 있는데 바이오스는..
메모리의 주소는 크게 두 가지로 나눌 수 있는데 먼저 Logical address(virtual address)는 프로세스마다 독립적으로 가지는 주소 공간이라서 각 프로세스마다 0번지부터 시작해요. CPU가 참조하는 주소이죠. 그리고 Physical address는 메인 메모리에 실제로 올라가는 위치죠. 이런 프로세스들이 실제로 할당받을 물리 주소는 address binding으로 결정되어요. 주소 바인딩에는 몇 가지 종류가 있어요. Compile time binding 컴파일할 때 물리 주소가 결정되는 주소 바인딩이에요. 프로그램의 물리 주소를 바꾸고 싶으면 다시 컴파일해야 하죠. Load time binding 프로그램의 실행이 시작될 때 물리 주소가 결정되어요. 로더가 메모리 주소를 부여하고 프로그..
0. Pre-processor(전처리기)가 컴파일 전에 코드를 적절한 상태로 처리해요. #로 시작하는 #include 같은 전처리기 구문으로 헤더 파일을 불러오거나 기호 상수를 정의해서 코드 상에 필요한 내용을 먼저 채워주는 역할을 해요. 1. Compiler가 각 소스 파일들을 컴파일해서 .o(obj)파일로 변환하고 2. Linker가 여러 오브젝트 파일을 하나의 오브젝트 파일로 묶어요. 이때 생긴 하나의 오브젝트 파일이 우리가 보는 .exe파일, 실행 파일이에요. 3. 이 파일을 실행시키면 운영체제의 Loader에 의해 메모리에 적재되어요. Compiler 프로그래머가 C등의 문법에 의해 작성한 소스를 기계어로 번역해서 위의 오브젝트 파일에 넣는 역할을 해요. 그리고 각각 소스 파일에 대한 Symbo..
//다른 곳에서는 메인 메모리를 편의상 메모리라고 했지만 여기서는 혼동을 방지하기위해 메인 메모리라고 풀 네임으로 썼어요. 컴퓨터는 다양한 저장장치가 사용되는데 속도(CPU가 접근하는데 걸리는 시간), 용량, 가격(비트당 단가)의 차이에 따른 분류를 할 수 있어요. 아래의 그림에서 아래에 있을수록 가격이 감소하고(용량이 증가하고) 속도가 느려져요. 그러니까 싸고(크고) 느린 저장장치가 비싸고(작고) 빠른 저장장치를 보완해줘요. 여기서 프로그램이 실행되기 위해서는 반드시 메인 메모리에 있어야 해요. 그 중 일부분이 캐시로, 또 그 중 실행할 명령어는 CPU 레지스터에 적재되어서 실행 과정을 거쳐요. Register CPU는 여러 레지스터를 가지고 있는데 알다시피 메인 메모리보다 빠르지만 크기가 작아요. 시..
운영체제는 크게 커널과 유틸리티 프로그램으로 나뉘어요. Kernel 사용자와 응용 프로그램을 위해 가장 빈번히 사용되는 기능을 담당하는 부분이에요. 빈번하니까 메모리에 상주(常住)해야겠죠? 계속 HDD와 메모리를 왔다 갔다 거리면 입출력 낭비니까요. 컴퓨터가 부팅될 때 메모리에 적재되고 종료될 때까지 계속 남아있어요. 운영체제의 핵심이며 핵(Nucleus, 核), 관리자, 메모리 상주 프로그램이라고 부르기도 해요. Utility program 운영체제의 프로그램 중 디스크 조각모음, 메모장 같은 자주 사용되지 않는 프로그램들은 HDD에 두고 필요할 때 잠시 메모리에 적재시켜 실행한 후 다시 HDD로 보내면 응용 프로그램을 위한 메모리 공간을 확보할 수 있어요. 이를 유틸리티 프로그램이고 비상주(非常住) ..
컴퓨터의 여러 응용 프로그램을 설치해주고 하드웨어 장치를 효율적으로 작동하게 관리하는 자원 관리와 사용자가 컴퓨터를 손쉽게 이용할 수 있도록 해주는 User Interface를 위한 프로그램의 집단이에요. 운영체제는 컴퓨터의 하드웨어를 조정하고 관리하는 소프트웨어라는 점에서 응용 프로그램과 차이를 가져요. 컴퓨터의 기본 요소는 4가지가 있고 각각 하나 이상의 모듈이 존재해요. 이런 구성 요소들은 프로그램 수행을 위해 연결되어 있죠. CPU 컴퓨터의 동작을 제어하고 데이터를 처리해요. MIPS(Million of Instructions Per Second, 초당 n00만 개의 명령을 수행)라는 단위로 속도를 측정해요. 메인 메모리 데이터와 프로그램을 저장해요. 컴퓨터가 종료되면 내용이 사라지는 휘발성이고 ..