[운영체제/OS] 시스템 소프트웨어
시스템 소프트웨어
응용 프로그램들을 지원하기 위해서 개발된 소프트웨어로 사용자보다는 하드웨어 위주의 소프트웨어
시스템 소프트웨어에는 운영체제(UNIX, MS-DOS, Windows 등)나 유틸리티(컴파일러, 링커, 로더, 매크로 프로세서, 탐색기) 등이 있으며, 규모나 복잡도가 매우 커서 일반 사용자들이 개발하기에는 어렵다
시스템 소프트웨어를 개발하는 도구들에는 시스템 언어(어셈블리어, C언어) 및 번역 프로그램(어셈블러, 매크로 프로세서, 컴파일러 등)이 있으며 링커, 로더 등도 포함된다
- 프로그램을 기억 장치에 상주시킨다
- 인터럽트를 관리한다
- 기억/주변 장치 관리
- 파일 관리
시스템 소프트웨어 개발 도구
어셈블러(Assembler)
어셈블리어로 작성된 소스 프로그램을 기계어(0과 1로 구성된 언어)로 번역하고 로더(실행 가능한 파일로 만드는 프로그램)에 필요한 정보를 생성한다
- 프로그래머가 기계어로 작성하지 않아도 어셈블리어로 작성한 원시 프로그램을 기계어로 번역
- 어셈블리어로 작성된 원시 프로그램은 기계어보다 읽고 이해가 쉽다
- 프로그램의 주소가 기호 번지이다
- 프로그램에 데이터를 사용하기 쉽다
어셈블러 기능
기능 | 상세 |
---|---|
명령어 생성 | 원시 프로그램에 있는 기호 명령어를 분서갛여 기계어 명령어로 변경 |
기계 주소를 할당 | 원시 프로그램에 있는 기호 번지나 상수의 기억 장소를 할당 |
의사 명령어 처리 | 프로그램의 시작과 종료, 재배치 정보 등 프로그램의 안내자 역할을 하는 명령어들을 처리 |
어셈블러 종류
-
단일 패스 어셈블러(1-Pass)
원시 프로그램을 한 번에 검색하여 일괄적으로 기계어 코드로 변경
잘못된 명령어를 사용하는 경우에는 실행할 수 없는 파일을 만든다. 따라서, 정확한 명령어나 기호번지를 사용해야 하는 어려움이 존재- 기호 테이블을 정의
- 한 번에 번역하기 때문에 속도가 빠르다
- 프로그램 크기가 작으며 작성이 어렵다
-
이중 패스 어셈블러(2-Pass)
원시 프로그램을 1차 검색하여 명령어 및 기호 번지들을 데이터 베이스 테이블에 저장.잘못 사용한 명령어나 기호 번지는 프로그래머가 수정할 수 있도록 오류 메시지를 출력하기도 한다. 이후에는 각 테이블에 저장된 정보들을 이용하여 기게어 코드나 기억 장소를 변환한다.
매크로 프로세서(Macro Processor)
어셈블리어를 사용하기 쉽도록 명령어들을 문자로 치환하여 확장해준다
- 매크로는 일종의 문자열 치환과 같이 사용된 횟수만큼 명령어를 생성, 삽입해서 실행
- 매크로 정의 내에 또 다른 매크로 정의 가능
- 파스칼 언어는 매크로 프로세서의 기능이 없다
- 매크로 라이브러리 : 여러 프로그램에서 공통적으로 자주 사용되는 매크로를 모아 놓은 라이브러리
매크로 프로세서 기능
기본 기능 | - |
---|---|
매크로 정의 인식 | 원시 프로그램 내에 존재하는 매크로를 파악하여 매크로를 정의한 부분의 시작과 종료를 파악 |
매크로 정의 저장 | 매크로 프로세서는 매크로 명과 정의된 내용을 매크로 호출 시 확장하기 위해 저장 |
매크로 호출 인식 | 원시 프로그램 내에 매크로가 확장하기 위한 준비가 되어 있는 지 확인 |
매크로 확장 및 인수 | 치환 매크로를 호출하면 매크로 명이 있는 원시 프로그램 위치에 저장된 내용과 인수를 치환 |
컴파일러(Compiler)
고급 언어로 작성된 프로그램을 기계에 적합한 프로그램으로 번역해주는 프로그램
원시 프로그램에 번역 프로그램을 수행하면 번역 프로그램은 기계가 이해할 수 있는 이진수로 구성된 목적 프로그램을 출력
- COBOL, C, FORTRAN, PASCAL, ALGOL, Ada…
인터프리터(Interpreter)
고급 언어로 작성된 원시코드 명령어들을 한번에 한 줄씩 읽어들여서 실행하는 프로그램
인터프리터 과정에서는 최적화 단계를 거쳐 목적 프로그램을 출력하지 않는 것이 컴파일러와 크게 구분되는 점이다(기계어 명령어들이 만들어지는 컴파일 단계를 거칠 필요가 없다)
- BASIC, LISP, Python, APL
링커(Linker)
컴파일러가 만들어낸 하나 이상의 목적 파일을 가져와 이를 단일 실행 프로그램으로 병합하는 프로그램
로더(Loader)
목적 프로그램을 실행 가능한 파일로 변환하기 위해 주기억 장소를 할당하거나, 여러 개의 목적 프로그램을 연계 편집하여 CPU가 처리될 수 있는 프로그램으로 변환
좁은 의미의 로더 :
프로그램을 실행하기 위하여 프로그램을 보조 기억 장치로부터 컴퓨터의 주기억 장치에 올려놓는 로더
넓은 의미의 로더 :
적재뿐만이 아닌 목적 프로그램들끼리 연결시키거나 주기억 장치를 재배치하는 등의 포괄적인 작업을 수행하는 로더
로더의 기능
일반적으로 로더는 프로그램을 실행하기 위하여 프로그램을 보조 기억 장치로부터 컴퓨터의 주기억 장치에 올려놓는 기능을 가진 프로그램으로 할당, 연결, 재배치, 적재 순서로 진행
기능 | 내용 |
---|---|
할당(Allocation) | - 목적 프로그램이 실행된 주기억 장치 공간을 확보 - 단일 프로그램은 프로그램 전체를 적재하여 실행할 수 있는 주기억 장치 공간을 확보 - 다중 프로그램은 프로그램의 일부를 적재한 후 실행 도중에 필요한 부분을 적재할 수 있는 주기억 장치 공간을 확보 |
연결(Linking) | - 여러 개의 독립적인 모듈을 연결 - 독립적인 주기억 장치의 일부 공간을 논리적인 주소 공간으로 연결 - 링키지 에디터는 프로그램 적재 시 필요한 프로그램들을 결합하여 주기억 장치에 적재함은 물론 보조 기억 장치에 로드 이미지를 보관해두는 역할을 수행 |
재배치(Relocation) | - 프로그램이 주기억 장치 공간 안에서 위치를 변경할 수 있게 한다 - 베이스 레지스터를 관리 |
적재(Loading) | 프로그램 전체를 주기억 장치에 한 번에 적재하게 하거나 실행 시 필요한 일부분만을 차례로 적재하게 한다 |
로더의 종류
로더의 종류 | 내용 |
---|---|
Compile and Go 로더 | - 번역 프로그램과 로더가 하나로 구성되어 번역 프로그램이 로더의 역할(연결 기능은 수행하지 않는다)까지 담당하는 방식 - 매우 단순하여 프로그램하기가 용이하며 주기억 장소의 제한이 없다면 가장 이상적이라 할 수 있다 |
절대 로더(Absolute Loader) | - 로더의 역할이 축수되어 가장 간단한 프로그램으로 구성된 것으로 기억 장소 할당이나 연결을 프로그래머가 직접 지정하는 방식(재배치: 번역 프로그램 / 적재 : 로더) - 프로그래머 입장에서는 매우 어렵고 한 번 지정한 주기억 장소의 위치는 변경이 힘들다는 단점 존재 |
직접 연결 로더 | - 로더가 할당, 연결, 재배치, 적재를 모두 수행하는 일반적인 형태 - 기억 장소를 자동으로 재배치하고, 독립적으로 프로그래밍된 프로그램들을 연결하여 수행하기 때문에 재배치 로더 혹은 상대적 로더라고도 한다 |
Binding 로더 | - 할당, 연결, 재배치만 하는 로더로 프로그램을 실행하기 전 모든 준비만을 담당 |
Module 로더 | - 적재만을 담당하는 로더를 의미 |
동적 적재 로더(Direct Linking Loader) | - CPU가 현재 사용 중인 부분만 전재하고 미사용 중인 프로그램은 보조 기억 장치에 저장해두는 방식으로 Load-On-Call이라고도 한다 - 오버레이(Overlay) : 프로그램 파일을 분할하여 순차적으로 적재하는 운영 방식 - 스와핑(Swapping) : 프로그램 파일을 분할하여 교체하면서 적재하는 운영 방식 |
댓글남기기