운영체제 (CSE30101) - Ch02: Operating System Structures

‍정진철·2022년 9월 21일
0

커널

  • 프로세스 관리 , 메모리 관리 , 저장장치와 같은 운영체제의 핵심적인 기능을 모아놓은 곳

유저 인터페이스

  • 커널에 사용자의 명령을 전달하고 실행 결과를 사용자에게 알려줌

system calls

  • CPU에게 자원을 이용하겠다고 알리는 일종의 알림
  • 시스템 호출은 커널이 제공하는 시스템 자원의 사용과 연관된 함수
  • 협소의 의미로는 커널만 운영체제라고 일컫지만 요즘에는 사용자 인터페이스, 시스템 콜 까지 모두 합쳐 운영체제 라고함.

User Interface (CLI)

  • 예를들면 윈도우의 cmd, 유닉스 계열에서의 shell
  • shell이라고 불리는 이유는 소라껍질 처럼 커널에 접근하기 전에 한 층의 껍질을 통해 들어가야 한다는 의미.
  • 운영체제 서비스를 실제로 이용할 수 있게 하는게 shell
  • Bourne shell 를 리뉴얼 해서 리눅스 에서 bash 만듦 => born again shell 을 의미

system Programs

  • 사용자가 개발자라는 전제한에 제공됨
  • 유닉스 운영체제가 설치되어있는 시스템을 사용하는 사람-> 개발자
  • 컴파일러 -> 유닉스와 맥OS는 기본적으로 운영체제 설치시 컴파일러 가지고 있음.
  • GCC컴파일러 를 기본적으로 가지고있음 (리눅스)
  • General purpose OS (맥, 윈도우) -> 사용자가 무슨 응용프로그램을 사용하느냐에 따라 컴퓨터의 순간적인 용도가 달라짐. (게임, 문서편집등)
  • 리눅스는 주로 개발을 위한 용도

<컴파일 과정>

컴파일: 인간이 이해할 수 있는 언어로 작성된 소스코드를 CPU가 이해할 수 있는 언어로 변환하는 작업

1. 전처리 과정

  • 전처리기(Preprocessor)를 통해 소스코드 파일 (.c)를 전처리된 소스코드 파일 (.i)로 변환
    -> 이 과정에 주석제거 , 헤더파일삽입(#include), 매크로 치환 및 적용(#define) 의 과정 수행

2. 컴파일 과정

  • 컴파일러 과정은 컴파일러를 통해 전처리된 소스코드 파일(.i) 을 어셈블리어(*.s) 파일로 변환 하는것
  • 이 과정에서 우리가 흔히 문법검사 라고 하는걸 수행
    ( + static 영역 메모리 할당)

3. 어셈블리 과정

  • 어셈블리 과정은 어셈블러를 통해 어셈블리어 파일은 오브젝트 파일로 변경

오브젝트 파일

  • 어셈블리어 코드는 사람이 알아 볼 수 없는 기계어로 번역되는데 이것은 오브젝트 코드라고함
  • 오브젝트 코드로 구성된 파일을 오브젝트 파일이라고 함
  • 오브젝트 파일을 실행시키기 위해서 예를들어 printf함수를 사용하는 오브젝트 파일과 printf 함수를 구현한 오브젝트 파일 (라이브러리) 를 연결시키는 작업 필요. -> linking

4. 링킹(linking) 과정

  • 링커를 통해 오브젝트 파일을 묶어 실행 파일로 만듦
  • 이 과정에서 오브젝트 파일들을 프로그램에서 사용하는 라이브러리들과 연결시켜 하나의 실행파일 생성

Static vs Dynamic linking

  • 정적 라이브러리는 정적 링킹(Static Linking) 과정에서 링커가 프로그램에 필요로 하는 부분을 라이브러리에서 찾아 실행 파일에 복사.

정적 라이브러리 확장자는 윈도우 환경에서는 .lib, 리눅스 환경에서는 .a

  • 동적 라이브러리는 동적 링킹(Dynamic Linking) 과정에서 링커가 라이브러리 내용을 복사하지 않고 해당 내용의 주소만 가지고 있다가 런타임에 실행 파일과 라이브러리가 메모리에 위치할 때 해당 주소로 가서 필요한 내용을 가져오는 방식.

동적 라이브러리 확장자는 윈도우 환경에서는 .dll, 리눅스 환경에서는 .so.

참조 : https://bradbury.tistory.com/224


  • Function call
    -> 웹서버에서 요청 들어옴
    -> read 수행시 trap 걸려서 CPU 위로 운여체제가 올라감
  • Handling in os
    -> open 요청해서 시스템콜이 운영체제에 일어나면 I/O 관련 시스템콜 단계 1. 파일 open 2. read , 3.write, 4. close 수행
    -> 시스템콜 호출시 핸들러가 어떤것부터 동작시켜야 하는지 넘버링을 해 고유번호를 만들어 활용 (벡터테이블 만들어서 효율적으로 수행)
    -> 트랩 메커니즘 발생시 테이블참조해서 트랩 핸들러 선정해서 동작 수행시킴
    -> 시스템 콜 다른말로 - > software interrupt
    -> 인터룹트 발생시 운영체제 실행됨
    -> 인터룹트도 테이블이 있음 ( 0번: timer interrupt , 1번: 키보드 , 2번: 마우스 기타등등..)
    -> 인터룹트 발생시 벡터값이 실행돼고 해당 벡터값에 맞는 벡터테이블 명령 수행
  • Parameter passing
    -> 특정 레지스터 통해서 인자값 전달.
  • 시스템콜 발생시 시스템 라이브러리들을 이용해 운영체제가 실행시킴

  • 모놀리틱 커널
    -> 운영체제를 개발 하는 관점에서 봄
    -> 운영체제 모든 기능을 구현해 하나의 이미지로 만듦 (동작시 빠름 , 별도의 추가 메커니즘 없이 운영체제 자체적으로 가진 능력 활용 가능 , 단점은 하드웨어가 업그레이드 할 시 유지보수 어려움) , 의존성이 큼 -> 절차지향 프로그래밍 단점을 고스란히 가지고 있음
  • 마이크로 커널
    -> 기능을 분리시킴 (인디펜던트)

  • 마이크로 커널
    -> 핵심만 커널로 만듬
    -> 필요한 서비스를 에플리케이션으로 만들어 에플리케이션의 우선순위를 높여서 동작 필요한것만 동작시킴
    -> 속도가 느림
    -> 커널은 무겁지 않으므로 최적화 가능

  • 커널의 오버헤드가 커지니 modular approach -> 커널을 만들어 그 외 서비스들을 add on 시켜서 모듈러 방식으로 구동 (모듈화 해서 선택적으로 가져와서 필요한것만 컴파일)
    -> 유지 보수 비용 줄어듬

profile
WILL is ALL

0개의 댓글