본문 바로가기
정보처리기사/필기

[정보처리기사 필기 요약] 시스템 소프트웨어

by 채연2 2021. 3. 4.

* 시스템 소프트웨어

  • 사용자가 하드디스크에 있는 파일 조작 시 사용자가 직접 처리 않고 이를 대신 처리하는 P/G
  • 컴퓨터 HW를 실제로 운용하는 P/G
  • P/G을 메모리에 적재하거나 인터럽트 관리, 기억장치 관리 등 역할
시스템 소프트웨어 개념
운영 체제
(Operation System)
- HW와 SW 자원 관리하고 컴퓨터 P/G 위한 공통 서비스 제공하는 P/G
어셈블러
(Assembler)
- 어셈블리어 --> 기계어로 변환해주는 P/G
컴파일러
(Compiler)
- 고급언어로 작성한 원시 P/G을 기계어인 목적 P/G으로 바꾸어 주는 P/G
인터프리터
(Interpreter)
- 고급 언어나 코드화된 중간 언어 입력받아 목적 P/G 생성 없이 직접 기계어 생성하여 실행시켜 주는 P/G
전처리기
(Preprocessor)
- 원시 P/G 번역 전에 미리 언어 기능 확장한 원시 P/G 생성하는 시스템 P/G
- 예) C언어 #include문
링커(Linker) - 서로 독립적으로 작성되고 번역된 목적 P/G 호출 및 연계시키는 시스템 P/G
로더(Loader) - 실행 파일을 주기억장치에 적재하여 실행하도록 해주는 시스템 P/G

 

  • 실행 과정

 

용어 설명
컴파일 - 사람이 작성한 P/G 고급언어를 기계어로 번역하는 과정
링킹 - 기계어(목적 P/G)가 필요한 라이브러리들 연결하여 하나의 실행 P/G 생성하는 과정
로딩 - 외부 기억장치로부터 실행 P/G을 주기억장치에 적재, CPU 실행 가능케 하는 과정
고급언어 - 사람들이 이해하기 쉽게 만든 프로그래밍 언어
- 포트란, 코볼, C, 자바, C#, C++ 등
어셈블리어 - 기계어의 명령부와 번지수를 사람이 이해하기 쉬운 기호로 1:1 대응 시킨 프로그래밍 언어
기계어 - 컴퓨터가 직접 읽을 수 있는 2진수로 이루어진 언어

 

  • 컴파일러와 인터프리터
    • 컴파일러에 의한 목적 코드 생성이란 고급언어로 작성한 소스 코드 입력 받아 실항할 수 있는 기계어 명령어 담은 파일을 출력물로 만드는 과정
    • 컴파일러 단계
      • 컴파일러에 의해 어휘 분석(Lexical Analysis, 일종의 Parsing 기능) 통해 코드 분해
      • 분해된 코드로 심볼 테이블 생성하여 문법 검사 후 최적화
      • Error Recovery : error가 다른 문장에 영향 없도록 수정
      • 목적 코드 생성

 

단계 설명
Lexical Analyzer
(어휘 분석)
- 컴파일러 내부에서 효율적이며 다루기 쉬운 정수로 변경
- 원시 P/G 입력 문자열을 읽어 블랭크 제거
- 각 단어 분리하여 토큰으로 내부 단위 구성
Syntax Analyzer - 토큰 문법적 오류 여부 확인
Tokens ▶ Parser ▶ Trees
Intermediate Code generator
(의미 분석)
- 논리에 맞는 의미 부여
- 의미상 잘못된 부분 찾아냄
Code Optimizer - 비효율적 코드 구분하여 더 효율적인 코드로 변경
Target Code Generator - 중간 코드로부터 기계가 이해하는 명령어 생성
구분 컴파일러 인터프리터
장점 - 실행 효율성, 성능, 안정성 좋음
- 반복적 호출되는 P/G은 한번 번역으로 빠르게 실행 가능
- 이식성, 유지보수성
- 사용자 융통성과 디버깅 용이
단점 - 기억장소 필요
- 목적 코드 용량 큼
- 수행시간 느림
사용 언어 - 포트란, 파스칼, 코볼, C - Visual Basic, LISP, APL, 자바

 

  • 링커와 로더
    • 링커의 역할
      • 서로 독립적으로 작성 및 컴파일 된 목적 P/G 연계시키는 시스템 P/T
      • 링커는 여러 목적 코드와 라이브러리 코드 단위(Code Chunk) 하나로 묶어 실행 가능한 하나의 실행 파일 생성
      • 링커는 P/G에서 참조하는 다양한 모듈을 실행 가능한 단위로 통합하는 과정
      • 링크 시 연결된 모듈은 사용자가 지정하거나 라이브러리로 주어짐
    • 로더의 역할
      • 외부 기억장치로부터 실행 프로그램을 주기억장치로 옮기기 위해 메모리 할당, 연결, 재배치와 적재 담당하는 시스템 P/G
      • 커널에 있는 로더가 실행 파일과 라이브러리 파일을 가상 메모리에 로딩

 

동작 구분 설명
Allocation
(주기억장치 할당)
정의 - P/G 수행에 필요한 기억장소 할당 받는 기능
방법 - P/G 실행 시 필요한 부분 기억장치에 할당
Linking
(링킹)
정의 - 실행 중인 여러 P/G이 라이브러리나 특정 모듈 공유토록 P/G 적재 시 링크하는 기능
방법 - 링킹 로더는 링커에 의해 제공된 목적 파일 재배치 정보 통해 실행 가능한 코드 만들어 주기억장치에 적재
Relocation
(재배치)
정의 - P/G 내 재배치 가능한 상대주소를 할당된 메모리 절대주소로 변환하는 기능
방법 - 목적 코드 각 명령에 대해 재배치 여부 명시하는 재배치 비트 추가하여 표시
Loading
(적재)
정의 - Allocation, Linking, Relocation 작업이 수행된 P/G을 주기억장치에 적재하는 기능
방법 - 로더의 Allocation 방법에 의거해 필요한 기능 수행
로더 메모리 배치 유형 설명
컴파일 즉시 로더
(Compile-and-go Loader)
- 가장 간단한 방법
- 번역기가 로더 역할까지 담당
- 로더 기능은 단순히 실행 제어
- 어셈블러 재번역 요구
- 서로 다른 언어로 작성된 모듈 간 연결 불가
절대 로더
(Absolute Loader)
- 출력 결과는 보조기억장치에 저장
- 기계어에서 미리 지정한 번지에 P/G과 데이터 직접 적재
- 프로그래머가 어셈블러에게 적재주소 지정
재배치 로더
(Relocation Loader)
- 적재 모듈 주기억장치에 적재
- 상대주소를 절대주소로 변환
- 로드 과정에서 메모리의 적당한 영역 찾아서 로드
링킹 로더
(Linking Loader)
- 재배치 링크 및 적재 일괄 수행
- 두 단계의 패스로 구성
- 패스 1 : 모듈에 기억장소 할당, 외부 기호 주소 확정, 외부 기호표 작성
- 패스 2 : 모든 상대주소를 절대주소로 변환, 외부 기호표 참조 후 적재
동적 로더
(Dynamic Loader)
- 재배치 로더와 링킹 로더 단점 보안
- CPU가 현재 사용 중인 부분만 선택적 로드
- 미사용 중인 P/G은 보조 기억장치에 저장
- 서브 루틴 상호 호출 관계 파악
- Load-on-call과 동의어
적재 기억장소 선정 기법 내용
절대 번지 선정법
(Absolute Address Allocation)
- 특별한 정책 없이 실행 코드의 절대번지 영역을 적재 공간으로 선정
- 초기 컴퓨터에서 사용, 단일 P/G만 수행
최대 공간 선정법
(Largest Fit Allocation) 
- 적재 가능한 메모리 공간 중 가장 큰 공간 선정
- 매우 간단한 알고리즘이나 메모리 낭비 심함
순차 공간 선정법
(Sequential Fit Allocation)
- 적재 가능한 공간 중 하위 메모리 영역 우선 배정
- 메모리 편중이 심함
최적 공간 선정법
(Best Fit Allocation)
- 적재 가능한 공간 중 최소 공간 선정
- 메모리 효율 높일 수 있으나 항상 빈 공간에 대한 모니터링 필요

 

  • 어셈블리어와 어셈블러
구분 설명
어셈블리어 - 기계어 명령부(연산코드)와 번지수(오퍼랜드)를 사람이 이해하기 쉽게 일대일 대응시켜 기호화한 프로그래밍 언어
- 어셈블러로 번역 시 기계어와 일대일 대응
예) LOAD X Y, ADD X Y, STOR X Y 등
- 크로스 어셈블러 : 다른 컴퓨터 이용하여 어셈블리어 P/G을 이식(porting)하려는 CPU 기계어로 번역하는 P/G
어셈블러 - 어셈블리 P/G을 기계어 P/G으로 번역하는 SW
- 니모닉스(mnemonics) : 어셈블리 명령어가 지정하는 연산 가리키는 알파벳 기호
예) 'LOAD', 'ADD', 'STOR' 등
기계어 - 컴퓨터가 직접 읽을 수 있는 2진수로 이루어진 언어
- 컴퓨터 HW 설계에 따라 정의
예) 00100101
- 연산코드(OP Code)와 오퍼랜드(Operand)로 구성됨
- 연산코드 : CPU가 수행할 연산 지정해주는 비트들
- 오퍼랜드 : 연산에 사용될 데이터 혹은 데이터가 저장된 기억장치 주소

 

  • 명령어
구분 설명
데이터 전송 명령어 - 데이터를 메모리에서 레지스터 또는 메모리, 레지스테에서 메모리 또는 레지스터로 이동하는 명령어
예) LOAD, STORE, MOVE, PUSH
산술 연산 명령어 - ADD, SUB, MUL, DIV 등
논리 연산 명령어 - AND, OR, NOT, XOR 등
시프트 명령어 - 레지스터에 저장된 데이터 비트들을 이동하는 명령어
분기 명령어 - 다음에 실행할 명령어 새롭게 지정하는 명령어
예) JUMP, CALL, RETURN

 

  • 명령어 구조
    • 0-주소명령어 [연산코드] (예 : PUSH, POP)
    • 1-주소명령어 [연산코드][오퍼랜드] (예 : ADD A)
    • 2-주소명령어 [연산코드][오퍼랜드1][오퍼랜드2] (예 : ADD A, B)
    • 3-주소명령어 [연산코드][오퍼랜드1][오퍼랜드2][오퍼랜드3] (DP : ADD A, B, C)
    • 연산 코드에슨 명령어가 위치하며, 오퍼랜드에는 기억장치 주소, 레지스터 번호, 사용할 데이터 등 위치
    • 1-주소명령어는 누산기(Accumulator) 이용해서 명령어 처리
구분 설명
POP - 스택에 저장된 값 꺼냄
PUSH A - A에 저장된 값 스택에 삽입
MOVE R, A - A에 저장된 값 R로 전송
ADD R, A, B - A와 B 더해서 R에 저장

 

  • 명령어 수행 과정(Instruction Cycle)
    • 인출(Fetch Instruction) - 해독(Decode Instruction) - 실행(Execute Instruction) - 저장(Write Back) 순서로 구성
    • 간접 사이클 : 피 연산 데이터가 있는 기억장치 유효 주소 계산하여 레지스터(고속 임시 기억장치)에 적재 과정
단계 설명
명령어 인출 - IF(Instruction Fetch) stage
- 명령어 기억장치로부터 인출
명령어 해독 - ID(Instruction Decoding) stage
- 인출된 명령어 해석
명령어 실행 - EX(Instruction Execution) stage
- 해석된 결과 수행
데이터 저장 - WB(Write Back) stage
- 수행된 결과 저장

 

  • 파이프라인(Pipeline)
    • 단위 시간 내 하나 이상의 명령어 처리함으로써 성능 증가시키는 멀티 프로세스 환경에서의 명령어 처리 메커니즘
    • 명령어 처리 과정을 여러 단계로 세분화하여 단계마다 다른 작업 중첩 수행하여 병렬성 극대화

유형 설명
단일 파이프라인

 


- 명령어 수행 과정에서 각 단계 한 번만 중첩하여 다수 동작을 동시에 수행하는 병렬처리 기술
슈퍼 파이프라인

- 하나의 파이프라인 여러 부분으로 나누어 연속적인 흐름으로 중첩하여 처리, 성능 향상시키는 병렬처리 기술
- 각 명령어 수행 단계를 두 개 이상으로 분할한 구조
슈퍼 스칼라

- CPU 내 파이프라인 된 ALU(CPU 내 산술연산장치) 여러 개 포함하여 매 사이클마다 다수 명령어들이 동시에 실행하는 병렬처리 기술
예) 1개 cycle에 정수 연산 2개, 실수 연산 4개 동시 수행
슈퍼 파이프라인드
슈퍼 스칼라

- 슈퍼 스칼라 기법에 슈퍼 파이프라이닝 기법 혼합하여 적용
- 수행시간 더욱 단축한 기법
VLIW
(Very Long
Instruction Word)

- 동시에 수행될 수 있는 명령어들 컴파일러 수준에서 추출, 하나의 명령어로 압축하여 수행하는 병렬처리 기술
- EPIC 기법 : 컴파일러가 소스 코드로부터 명시적 병렬성을 찾아 병렬처리가 가능토록 기계어 코드 생성, 병렬 수행됨
- FI, DI는 한 회로에서 수행
- EI(실행 사이클)만 여러 개 기능 UNIT에 분할 수행
구분 슈퍼 파이프라인 슈퍼 스칼라 VLIW
명령어 해독 별개 해독, 동시 인출 별개 해독, 동시 인출 하나의 회로에서 인출, 해독
명령어 밀도 클럭 주파수에 좌우 ALU 수에 좌우 병렬성에 따라 좌우
병렬성 검출 실행 시 실행 시 컴파일 시
문제점 명령어 병렬성에 따라 성능 좌우
유형 설명
파이프라인 - 명령어 단위 수행시간은 변하지 않고, 단위시간 내 수행되는 명령어 수를 늘림으로써, 수행시간 단축시키는 설계 방식
멀티프로그래밍 - 시스템에서 여러 P/G있을 때 한 P/G이 프로세서 짧은 시간 동안 차지하여 작업 수행시키고, OS가 다음 P/B 수행되도록 하는 방식
벡터프로세싱 - 하나의 벡터 처리기로 여러 자료 동시에 처리하는 수평적 병렬처리
멀티프로세싱 - 주 프로세서(master CPU)가 시스템 모든 작업 관리하도록 설계되고, 다른 프로세서(slave CPU)는 주 프로세서가 부여한 일 수행
SMP
(Symmetric Multiprocessing)
- 두 개 또는 그 이상 프로세서가 한 개 공유된 메모리 사용하는 다중 프로세서 컴퓨터 아키텍처
MPP
(Massive Parallel Processing)
- 한 시스템 내 P/G을 여러 부분으로 나누어 다수 프로세서가 효율적으로 함께 작동하는 네트워크 이용 방식
구분 SMP MPP NUMA
의미 시스템 버스와 같은 인터커넥션 통해 프로세스, 메모리, IO 등 시스템 자원 균등하게 공유하는 구조 개별 프롯스, 메모리 IO 등 시스템 자원 가지는 노드들을 독립된 상호 연결로 결합한 구성 복수 개 CPU 보드를 연결하여 통합된 멀티 프로세서 시스템 만드는 구조
OS 표준 개방형 OS 지원 표준 개방형 OS 미지원 표준 개방형 OS 지원
구성 하나의 OS 커널 존재 각 노드별로 OS 커널 존재 글로벌 메모리 공유 방식
320x100

댓글