운영체제 목적과 시스템 구조

박민기·2023년 11월 24일
0

운영체제 밑재료

목록 보기
1/3
  1. 운영 체제의 목적
  • 사용자가 컴퓨터를 편리하게 사용
  • 컴퓨터 시스템 내부의 자원(CPU, Memory, GPU)을 효율적으로 관리
    • 효율성

    • 형편성 있는 자원 분배

    • 주어진 자원으로 최대한의 성능을 내도록

      하드웨어 뿐만아니라 소프트웨어 자원 등을 관리

  • Multitasking

  • Multiprogramming

  • Time sharing

  • Multiprocess

멀티 스레드 와 멀티 프로세스의 차이?

프로세스의 경우 실행중인 프로그램을 의미하고,
스레드는 프로세스 안에서 작동되는 실행단위라고 이해하면 편하다.
프로세스는 메모리와 CPU를 프로세스마다 할당받아서 사용하는데 스레드의 경우 프로세스 안에서 다른 스레드와 스택영역을 제외한 메모리와 CPU를 공유해서 사용합니다.
멀티 프로세스는 독립적인 프로세스로 간주되며 별도의 메모리 공간을 가지고 있습니다. 프로세스간 전환시 처리시간이 오래걸리며 메모리 효율성이 떨어질수도있습니다.
멀티 쓰레드의 경우 하나의 프로세스 내에서 실행되는 여러 스레드로 같은 메모리,CPU공간을 공유하여 데이터가 공유가 쉽습니다. 그렇기 때문에 시스템 자원과 메모리 공간을 더 효율적으로 활용할 수있습니다. 하지만 각 스레드가 동일한 주소 공간을 공유하므로 동기화 문제를 고려해야합니다.

컴퓨터 시스템 구조

컴퓨터가 이해하는 두가지 정보 : 데이터

  1. 숫자, 문자, 이미지, 동영상과 같은 정적인 정보 → 0, 1로 이해
  2. 명령어 → 컴퓨터를 실질적으로 움직이는 정보, 데이터는

컴퓨터의 네 가지 핵심 부품
1. CPU
- ALU(산술논리연산장치) : 계산기
- 레지스터 : CPU 내부의 작은 저장장치
- 제어장치: 제어 신호를 내보내고, 명령어를 해석하는 장치
- mode bit : 운영체제인지 사용자 입출력장치인지 구분해줌
- 1 - 사용자모드 : 사용자 프로그램 수행
- 0 - 모니터모드(커널 모드, 시스템모드) : OS 코드 수행

    0일때는 운영체제가 cpu를 가지고 있기 때문에 모든게 가능
    
    1일때는 사용자 프로그램이 cpu 가지고 있어 제한된 성능만 수행
    
	- loop 일 경우 특정 프로그램이 CPU독점하게됨
    
    → timer의 역할 : 셋팅된 시간만큼의 cpu독점시간을 제어함 → CPU의 time sharing을 위한 시스템
    
  1. 메모리(주기억 장치)
    • CPU의 작업공간, 매 clock사이클 마다 기계어를 읽음
  2. 보조기억장치
  3. 입출력장치(I/O device)
    — device controller : 각 입출력장치를 제어하는 작은cpu역할을함
    : local buffer → device controller의 작업공간(데이터 저장함)

DMA(Direct Memory Access) : 직접 메모리 접근 컨트롤러
- 데이터 동시접근 조절해줌
- I/O장치가 너무 많이 interrupt 많이 걸어 CPU가 작은일 하나하나 넘어가 효율적으로 작동 못함
- local buffer에서 데이터가 쌓일 경우 CPU에게 전달함

저장장치 계층 구조

  1. 프로그램의 실행

    1-1. 커널 주소 공간의 내용

    code(커널 코드)

    • 시스템 콜, 인터럽트 처리 코드
    • 자원 관리를 위한 코드
    • 편리한 서비스 제공을 위한 코드’

    data

    • CPU, mem, disk 자료구조를 가지고 있음
    • 하드웨어, 프로세스를 관리하기 위한 자료구조를 가지고있음

    stack

    • 운영체제의 코드는 요청에 의해 사용됨 process마다 커널 스택이 따로있음

    2) 사용자 프로그램이 사용하는 함수

    함수(function)

    1- 프로세스의 Address space의 code에 저장됨

    사용자 정의 함수

    • 나만의 함수

    라이브러리 함수

    • 자신의 프로그램에서 정의하지 않고 쓴 함수
    • 다른사람이 유용하게 만들려고 씀

    2- 운영체제 안에서 정의 된 함수 kernel내부에 정의 됨

    • 커널 함수의 호출 - 시스템 콜을 사용해야함
    • 물리적 차원에서 프로세스의 함수에서 커널 함수를 호출하기 매우 어려움

소스코드와 명령어

  1. 컴파일과 인터프리터
  • 컴파일
    1. 컴파일러는 고급 언어(소스 코드)를 저급언어(목적 코드)로 컴파일 해줌
    2. 소스 코드 자체를 한번에 컴파일 하기 때문에 소스 코드 컴파일 중 오류가 발생하면 소스 코드 전체가 실행되지 않음

  • 인터프리트 언어
    1. 인터프리터에 의해 한 줄씩 실행!! → 소스코드 전체가 저급 언어로 변환되기를 기다리지 않아도됨
    2. 소스 코드가 한줄씩 인터프리트해주기 때문에 중간에 오류가 발생하면 정확히 어디가 잘못되어있는지 알 수 있음

프로세스

  1. 프로세스의 문맥 → 특정시점에서 보았을때 CPU의 수행 상태를 나타냄
    • CPU수행상태를 나타냄 : Program Counter, 각종 register
    • 메모리의 프로세스의 주소 공간code, data, stack
    • 프로세스 관련 커널 자료 구조(PCB, Kernel stack
  2. 프로세스의 상태
    • Running
      • CPU를 잡고 instruction이 실행중인 상태
    • Ready
      • CPU를 기다리는 상태
    • Blocked (wait, sleep)
      • CPU를 주어도 당장 instruction 수행이 불가능
    • Suspended (stopped)
      • 외부적인 이유로 프로세스의 수행이 정지된 상태
  3. PCB
  • 운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보
  • 다음의 구성 요소를 가진다 (구조체로 유지)
    • os가 관리상 사용하는 정보(Process state, Process ID, scheduling information, priorty
    • CPU 수행 관련 하드웨어 값
      • Program counter, register
    • 메모리 관련
      • Code, data, stack의 위치 정보
    • 파일 관련
      • Open file descriptors
  1. 문맥 교환

    • CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
    • CPU가 다른 프로세스에게 넘어갈 때 운영체제는 다음을 수행
      • CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장
      • CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴
  2. 프로세스를 진행하기 위한 큐

    • Job queue
      • 현재 시스템 내에 있는 모든 시스템 큐
  3. 스케쥴러

    • Short-term schedluer(단기 스케쥴러 or CPU scheduler)
      • 어떤 프로세스를 다음번에 running시킬지 결정
      • 프로세스에 CPU를 주는 문제
      • 빨라야됨
    • Long-term scheduler(장기 스케줄러 or Job scheduler)
      • 시작 프로세스 중 어떤 것들을 ready queue로 보낼지 결정
      • 프로세스에 memory을 주는 문제
      • degree of Multiprgramming을 제어(메모리에 올라간 프로그래밍 수를 제어)
      • time sharing system에는 보통 장기 스케줄러가 없음
    • Medium-Term Scheduler(중기 스케줄러 or Swapper)
  4. Thread

    CPU수행에 관련 정보
    program counter, register, stack을 각 Thread마다 가지고 있음
    Process안에서 공유되는 부분 code section, data section, OS resources

장점

  1. 응답성 : 사용자의 입장에서 매우 빠름(다중쓰레드의 경우 하나의 쓰레드가 서버에서 그림파일을 가져오는 동안 block이 되지만 텍스트의 경우 빠르게 뜬다.
  2. 자원의 공유성 : code data resource는 자원을 공유함
  3. 경제성 : process를 새로 구성하는 것은 힘드나, Thread구성은 쉬움
profile
세상을 놀라게할 임베디드 SW 개발자

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN