1️⃣ 운영체제 서비스
💙 운영체제
- 운영체제
- 개발자 → 프로그램 실행 환경을 제공
- 프로그램 및 사용자 → 서비스 제공
- user interfaces
- system calls
- OS의 커널모드로 동작하는 중개자 역할 수행
- services
- 여러 편리한 환경 제공
💙 사용자 업무 서비스 (User view)
- 프로그램 및 사용자(프로그래머) 에게 제공하는 OS 서비스
- 사용자 인터페이스(UI)
- 명령어 라인 인터페이스 (CLI: Command Line Interface)
- GUI
- 배치 인터페이스
- 프로그램 실행 기능 (순서)
- 프로그램 메모리에 적재
- 해당 프로그램 실행
- 정상 or 비정상 방식으로 종료 (오류 시 알려주기)
- I/O 작업 기능
- 프로그램 실행에서 입출력 요구 시, 입출력 실행 수단을 필히 제공
- 파일 시스템
- 파일 조작, 관리 수행
- 통신 기능
- 오류 감지 기능
- 사용자 인터페이스(UI)
- (ex. 통신 관리 부서, 오류 감지 관리 부서)
💙 시스템 자원 서비스 (System view)
- 시스템의 자원을 공유하여, 시스템 자체의 효율을 위한 기능
- 자원 할당
- 다수의 사용자 또는 다수의 작업 동시 실행이 있을 때, 각각에게 자원을 할당
- 자원의 종류
- CPU 사이클, 메인 메모리, 파일 저장장치, I/O 장치…
- 회계
- 어떤 사용자가 어떤 종류의 자원을 얼마나 많이 사용하는지 추적
- 보호 및 보안 기능
- 보호
- 파일이나 자원에 대한 모든 접근 권한 권리
- 다중 사용자 또는 네트워크 컴퓨터 시스템에 저장된 정보의 소유자는 해당 정보의 사용을 제어 할 수 있어야 함
- 병행 프로세스는 서로 간섭하지 않아야 함
- 보안
- 외부로부터 시스템 보안 유지 위해 사용자 인증
- 잘못된 접근으로부터 외부 I/O 장치를 보호
- 보호
- 자원 할당
💙 운영체제 서비스 中 사용자 인터페이스 (UI)
- 사용자 인터페이스 종류
- 명령어 라인 인터페이스 (CLI: Command Line Interface)
- CLI나 명령어 해석기를 통해 사용자로부터 명령어를 직접 입력
- CLI는 커널 or 시스템 프로그램으로 구현
- 커널에 구현 → 명령 해석기 자체가 명령 실행코드를 가짐
- # Shell
- 명령어 해석기
- 사용자가 입력한 명령어를 커널로 전달
- 커널로 전달시, 커널이 이해할 수 있는 기계어로 통역
- 종류 여러개
- Bash($,#), Bourne Shell($, #), csh(%)…
- CLI는 커널 or 시스템 프로그램으로 구현
- CLI나 명령어 해석기를 통해 사용자로부터 명령어를 직접 입력
- GUI
- 사용자 친화적인 상징 인터페이스
- 명령어 라인 인터페이스 (CLI: Command Line Interface)
2️⃣ 시스템 콜
💙 시스템 콜
- 시스템 콜: OS가 제공하는 서비스에 대한 인터페이스를 사용자에게 제공
- OS에서 프로그램이 구동되는데 있어 파일을 읽어 오거나, 파일을 쓰거나, 혹은 화면에 메시지를 출력하는 등 많은 부분에서 커널 모드를 사용
- 시스템 콜은 이러한 커널 영역의 기능을 사용자 모드가 사용 가능하게 함
💡 즉, 프로세스가 하드웨어에 직접 접근해서 필요한 기능을 사용할 수 있게 해줌.
- 고급 언어 (C or C++) 로 작성됨
- 대부분 “직접” 시스템 콜 사용 대신 “고수준 API” 를 통해 시스템 호출에 접근
- 고수준 API(Application Programming Interface)란?
- 함수의 형태
- System call 들을 함수로 정의해 둠
- ∴ 매개변수, 반환값(return 값)등을 포함해야만 사용 할 수 있음
- 각 함수의 매개변수와 반환값을 포함 → 개발자가 사용 가능한 함수의 집합을 명시
- API를 호출하면, 해당 System call을 호출해 다시 API에 돌려줌
- ex. 기상청의 소프트웨어 시스템에는 일일 기상 데이터가 들어 있음. 휴대폰의 날씨 앱은 API를 통해 이 시스템과 "대화"하고 휴대폰에 매일 최신 날씨 정보를 표시함.
- 고수준 API(Application Programming Interface)란?
💡 사용자 프로그램이 운영체제가 제공하는 서비스에 접근하고자 함 → 이때, API를 사용 → API를 통해, 시스템 콜을 요청하여 운영체제 서비스의 기능을 수행
- 시스템 콜 API의 대표 종류
- Windows 용 Win32 API
- POSIX 기반 시스템 용 POSIX API (거의 모든 버전의 UNIX, Linux 및 M ac OS X 포함)
- JVM (Java virtual machine) 용 Java API
💙 시스템 콜 예시
- 파일 복사때 필요한 시스템 콜 호출 순서
💙 표준 API의 사례
- 유닉스 & 리눅스의 read()
💙 시스템 콜의 구현
- 시스템 콜의 종류는 여러가지
- ex. 키보드의 값 입력, 모니터 출력, 하드디스크에 파일을 만들고 read, write 동작…etc
- 각 시스템 콜에는 번호(index)가 매겨져 있음
- 시스템 콜 인터페이스는 ‘시스템 콜 테이블’을 관리
- 시스템 콜 인터페이스
- OS 커널 내에 있는 요청된 시스템 콜을 호출
- 시스템 콜의 종료 상태 및 반환 값을 반환함
- 운영체제가 제공하는 시스템 콜과 API의 연결 고리
- 시스템 콜 = 소프트웨어 인터럽트: 프로그램 내에서 하드웨어 자원을 이용하고자 함
- API – 시스템 콜 – OS의 상호관계
- open() 이란 시스템 콜이 들어옴
- 시스템 콜이 정당한지 체크, 정당하면 kernel 모드로 전환
- 하드 디스크의 ISR에서 read()를 처리, 그 결과 값을 사용자에게 보여줌
- kernel 모드가 user모드로 바뀜
- 장치파일을 오픈하는게 권한이 있으면 kernel 모드가 됨
- user 모드와 kernel 모드가 switch
💙 시스템 콜 특징
- 개발자는 시스템 콜의 구현에 대해 알 필요가 없다 (너무 복잡하기 때문)
- 개발자는 API를 제대로 사용 + OS가 시스템 콜의 결과로 한 작업을 이해하기만 하면 됨
- OS 인터페이스의 상세 사항은 API에 의해 개발자에게는 숨겨짐
- 런타임 지원 라이브러리에 의해 관리됨
- 예산: 자원, 정부: OS, 주민센터: 인터페이스, 시스템 콜: 공무원, 개발자: 민원 접수인
💙 시스템 콜에 파라미터 전달하기
- 시스템 콜 매개변수 전달하는 종류, 양 → OS와 시스템 콜에 따라 다름
- 매개변수를 레지스터에 전달 (가장 간단)
→ 매개변수의 갯수가 CPU 내의 총 레지스터 개수보다 많을 수 있음
→ but, 레지스터가 너무 작고, 다른 할 일이 많음 - 블럭의 메모리 주소가 레지스터에 매개변수로 전달 (메모리에 실제 매개변수 저장 후 메모리의 주소를 레지스터에 저장한 뒤, 매개변수로 전달)
- 스택에 넣어지고 운영체제가 꺼내는 방법OS에 매개변수를 전달하는 일반적인 3가지 방법
→ 1번은 매개변수 길이 제한 있음. 2,3번은 없음.
- 매개변수를 레지스터에 전달 (가장 간단)
- 테이블을 통한 매개변수 전달 (2번 방법)
- 메모리: 매개변수를 저장, 레지스터: 매개변수의 주소 값 가짐
- User program에서 X의 주소를 레지스터로 로드하고, 시스템 콜을 호출함
- OS의 시스템 콜의 코드 부분으로 레지스터가 X의 주소를 넘겨줌
💙 시스템 콜의 유형 = 운영체제가 하는 서비스 (시스템 콜을 어떨 때 사용하는가?)
- 프로세스 제어
- 프로세스 생성, 종료
- 프로세스 끝내기, 중지
- 적재 (메모리에 로드), 실행 (CPU에서 실행)
- 프로세스 속성 획득 및 설정
- 일정 시간 동안 기다리기
- 사건을 기다리기, 사건을 알림
- 메모리 할당, 메모리 반환
- 프로세스가 공유하는 데이터 접근을 관리하기 위한 락(lock)
- 파일 관리
- 파일 생성, 삭제
- 파일 열기, 닫기
- 읽기, 쓰기, 위치 변경
- 파일 속성 획득 및 설정
- 장치 관리
- 장치 요청, 장치 해제
- 읽기, 쓰기, 접근 위치 재 조정
- 장치 속성 획득 및 설정
- 논리적으로 부착 및 분리
- 정보 유지 관리 (대부분 kernel 모드에서 가능)
- 현재 시간 및 날짜 획득 및 설정
- 시스템 날짜 획득 및 설정
- 프로세스, 파일, 및 장치 속성 획득 및 설정
- 통신
- 통신 연결 생성, 삭제
- 메시지 전달 모델을 사용한다면 호스트 이름 또는 프로세스 이름을 명시하여 메시지 송신 또는 수신
→ 클라이언트에서 서버로 - 공유-메모리 모델의 경우에는 메모리 영역 생성 및 접근 권한 획득
- 상태 정보 전송
- 원격 장치의 부착 및 분리
- 보호
- 자원에 대한 접근 제어
- 권한 획득 및 세팅
- 사용자 접근 허용 및 거부
💙 Windows와 Unix의 시스템 콜 예
- 시스템 콜은 기능은 같지만, 운영체제에 따라 이름, 매개변수 종류, 리턴 타입도 다름
- 개발하고자 하는 운영체제에 맞는 시스템 콜을 사용해야 함
💙 표준 C 라이브러리 사례
- 표준 C 라이브러리는 시스템 호출 인터페이스를 제공
- printf() 함수는 내부적으로 write() 시스템 콜을 호출
💙 시스템 프로그램
- User가 설치하지 않아도 OS가 가지고 있는 프로그램
- 프로그램 개발 및 실행을 편리하게 할 수 있는 환경을 제공
- ex. 작업 관리자, 메모장
- 시스템 유틸리티
- 파일 관리
- 상태 정보
- 프로그래밍 언어 지원: 컴파일러, 어셈블러, 디버거
- 프로그램 적재 및 실행: 로더
- 통신
- 백그라운드 서비스
- 응용프로그램: 시스템에 포함되지 않고 사용자에 의해 실행됨
💙 시스템 부트
- 시스템에 전력이 공급되면, 명령 레지스터는 특정 메모리 위치를 가리키고 실행
- ROM 또는 EEPROM에 저장된 작은 크기의 코드
- 부트스트랩 로더/프로그램(bootstrap loader/program)
- 하드웨어 상태 진단
- CPU 레지스터, RAM, 장치 제어기 등 시스템 초기화
- 디스크에 있는 부트 블록(boot block) 로드 및 시작
- 모든 부트 프로그램이 로드되면, 파일 시스템에서 커널 탐색
- 커널을 로드 후 실행 → 시스템 실행
- 부트스트랩 로더/프로그램(bootstrap loader/program)
- 즉, 시스템이 어떻게 작동하는가에 대한 설명
- OS는 HDD에 저장
- ROM이 Boot-Loader을 가짐
- H/W에 있는 OS프로그램을 메모리에 프로세스로 살려놓음
- OS가 메모리로 로드되는 과정
→ 부팅
💻 Reference
'IT > 운영체제' 카테고리의 다른 글
[Chapter 01] Introduction of OS (0) | 2024.04.03 |
---|