오늘 한일

그림으로 배우는 구조와 원리: 운영체제

day1, day2, day3, day4 복습.

  • day1

    • 컴퓨터 하드웨어의 구성
      • 프로세서, 레지스터, 메모리, 시스템 버스, 주변 장치
    • 컴퓨터 시스템의 동작
      • 명령어의 구조, 명령어 사이클, 인터럽트
  • day2

    • 운영체제의 개념과 발전 목적

      • 운영체제의 개념: "사용자와 하드웨어 사이의 중간 매개체로 응용 프로그램의 실행을 제어하고 , 자원을 할당 및 관리하며, 입출력 제어 및 데이터 관리와 같은 서비스를 제공하는 소프트웨어"
      • 운영체제의 발전 목적: 편리성, 효율성, 제어 서비스 향상
    • 운영체제의 기능

      • 자원(메모리, 프로세스, 주변장치, 파일) 관리, 시스템(시스템 보호, 네트워킹, 명령 해석기) 관리
    • 운영체제의 발전 과정과 유형

      • 일괄 처리 시스템

        • 작업을 모아서 처리
        • 일괄처리, 버퍼링, 스풀링
      • 다중 프로그래밍

        • 메모리에 프로세스(프로그램)를 여러 개 올려놓고 하나의 프로세서에서 번갈아가면서 처리
        • 유휴시간 활용
      • 시분할 시스템

        • 다중 프로그래밍 + 규정 시간량 할당
        • 음답시간 최소화
      • 다중 처리 시스템

        • 단일 컴퓨터 시스템 내에서 둘 이상의 프로세서를 사용하여 동시에 둘 이상의 프로세스(프로그램)를 지원
        • 프로세서 하나가 고장나도 다른 프로세서에서 처리 가능
      • 실시간 처리 시스템

        • 더 높은 적시 응답을 요구
        • 데이터 흐름 또는 프로세서 연산에 엄격한 시간 요구
        • 경성 실시간 처리 시스템
          • 치명적인 영향을 미침
          • Ex) 무기 제어, 발전소 제어
        • 연성 실시간 처리 시스템
          • 치명적이지 않음
          • Ex) 동영상 스티리밍
      • 분산 처리 시스템

        • 시스템마다 독립적인 운영체제와 메모리로 운영, 필요할 때 통신
        • 사용자에게는 중앙집중식 시스템처럼 보이나, 실제로는 다수의 독립된 프로세서에서 실행
        • 데이터를 여러 위치에서 처리, 저장하며 여러 사용자가 공유 가능
        • 하나의 프로그램을 여러 프로세서에서 동시에 실행 가능
  • day3

    • 운영체제의 서비스
      • 부팅 서비스
        • 초기화 목적
        • 부팅 or 부트스트래핑
        • 부트 로더
      • 사용자 서비스
        • 프로그래머가 프로그래밍 작업을 쉽게 할 수 있도록 서비스 제공
        • 사용자 인터페이스, 프로그램 실행, 입출력 동작 수행, 파일 시스템 조작, 네트워크 통신, 오류 탐지
      • 시스템 서비스
        • 시스템 자체의 효율적인 동작을 보장
        • 자원 할당, 계정, 보호와 보안
      • 시스템 호출
        • 실행 중인 프로그램과 운영체제 간의 인터페이스 (API)
        • 사용자 프로그램은 시스템 호출을 하여 운영체제의 기능을 제공받음
        • 프로그램에서 명령어나 서브루틴의 호출 (프로그래밍 언어)
        • 명령 해석기를 사용하여 대화 형태로 호출
    • 운영체제의 구조
      • 단일 구조 운영체제
        • 모놀리식 커널 구조
        • 대부분의 기능을 커널에 그룹화해서 구현
        • 직접 통신하여 시스템 자원을 효율적으로 관리할 수 있음
        • 커널 크기가 커지면서 오류 검출 등 유지보수 어려움
      • 계층 구조 운영체제
        • 비슷한 기능을 수행하는 요소를 그룹화하여 계층적으로 구성
        • 한 계층에서 다음 계층으로 데이터를 전달할 때마다 추가적인 시스템 호출이 발생
          • 성능 저하
        • 각 계층은 자신의 하위 계층 서비스와 기능만 사용하므로 설계나 구현이 단순해지며 오류 검출 등 유지보수 용이
        • 계층을 정의하기가 애매
      • 마이크로 커널 구조 운영체제
        • 커널에는 최소 기능만 포함시켜 크기를 대폭 줄여 커널의 기능을 많이 제외
        • 기타 기능은 사용자 공간으로 옮겨 사용자 영역에서 수행하는 서버 구현 방법
        • 커널은 하드웨어 초기화, 메모리 관리, 프로세스 관리, 프로세스 간 통신, 프로세스 간 협력을 하는 동기화 기능 등 기본 기능만 실행
        • 사용자 영역의 서버에서 네트워크 시스템, 파일 시스템 상호작용과 장치 관리 등 대부분의 운영체제 구성 요소 제공
        • 모듈화 정도가 높아 확장성, 이식성, 규모 확장성이 높지만, 모듈 간에 통신이 빈번하게 발생하여 성능 저하 가능성: 프로세스 간 통신 발생을 최소화시키는 것이 중요 과제
  • day4

    • 프로세스의 개념
      • 프로그램
        • 보통 디스크에 존재
        • 컴파일한 코드, 초기화 전역변수, 문자열과 문자열 상수 등 정적 데이터를 포함하는 정적 개념
      • 프로세스
        • 실행 중인 프로그램
        • 디스크에 있던 프로그램을 메모리에 적재하여 운영체제의 제어를 받는 상태가 됨
        • 프로그램 카운터, 레지스터 내용을 포함하는 동적 개념
        • 스택
          • 데이터를 일시적으로 저장
          • 지역변수, 반환 주소, 반환 값 등
          • 코드 영역과는 별도로 유지되는 자유 영역
          • 수동으로 메모리 할당/해제
          • 스택과 인접한 방향으로 커짐
          • 스택 포인터와 힙 포인터가 만나면 메모리가 소진되었다는 의미
        • 데이터
          • 프로그램의 가상 주소 공간
          • 전역번수, 정적변수 저장
        • 코드
          • 실행 명령을 포함하는 메모리 혹은 목적 파일에 있는 프로그램 영역
          • 디스크에서 읽혀진 컴파일한 프로그램을 저장
          • 읽기전용
    • 프로세스의 상태변화와 상태 정보
      • 상태변화
        • 생성, 비실행, 실행, 종료 (비실행 -> 실행: 디스패치, 실행 -> 비실행: 인터럽트)
        • 생성, 준비, 실행, 대기, 종료 (준비 -> 실행: 디스패치, 실행 -> 준비: 타임아웃, 실행 -> 대기: 블락, 대기 -> 준비: 웨이크업)
      • PCB
        • 프로세스 상태 정보를 저장하는 프로세스 제어 블록
        • 문맥교환 시 이전 PCB 저장, 현재 PCB 로드
    • 프로세스의 관리
      • 계층형
      • 생성, 종료, 제거
      • 중단과 재시작
        • 인터럽트 사용
        • 시스템 부하를 조절하는데 용이
        • 중단된 준비와 중단된 대기

소프트웨어 악취를 제거하는 리팩토링

  • 누락된 추상화
    • 클래스나 인터페이스가 아닌 데이터 무리나 인코딩된 문자열을 사용
    • "뚜렷한 개념적인 경계와 독자성 제공" 위반
  • 명령 추상화
    • 연산을 클래스로 사용 (클래스 내부에 정의된 메서드가 하나밖에 없는 클래스 형태)
    • "도메인 사상(문제 도메인 -> 해법 도메인)" 위반
    • 때로는 연산을 클래스로 변환하는 편이 바람직할 수도 있음
  • 불완전한 추상화
    • 추상화가 상호 보완적이거나 상호 연관된 메소드를 완벽하게 지원하지 못함 (add가 있으면 remove도...)
    • "일관성과 완결성 보증" 위반
  • 다면적인 추상화
    • 추상화에 할당된 책임이 둘 이상
    • "의미있는 단일 책임 할당" 위반

오늘 느낀점

학교에서 운영체제를 배웠는데, 하나도 기억이 안난다... 분명 A+를 받았었는데, 무슨 일이 일어난거지..

내일 할일

  • 로또 4단계 피드백 요청
  • 사다리 1단계 피드백 반영
  • 플러터 1/4/7/14 앱 기능 설계