1. Computer start-up
우선 컴이 처음 파워온이 되면 Bootstrap program이 실행이 된다.
rom이나 eeprom이 있다. 혹은 firmware도 있다.
실행이 되면서 기본적인 check up을 한다.
즉 메모리에 bad 세턱는 없는지 여러가지 컴포넌트(메모리, cpu)가 잘꽂혀져있는지
기본적인 첵업하고
커널을 로딩
커널이 기본적인 초기화 작업한다. Interrupt 서비스 루틴을 초기화 한다던지 (뒤에가서 자세히 설명) 커널이 사용하는 여러가지 데이터 구조들을 초기화하는지 등에 대한 작업
이러한 초기화 작업들이 다 끝나게 되면
로그인 화면이 뜬다. 뜨고 난뒤 운영체제가 하는 일은 기다리기.
예를 들어 사용자가 로그인 하기 위해서 키보드를 타이핑 한다던가 또는 마우스를 움직인다던가
그런 이벤트가 발생했을 때만 운영체제가 그에 상응하는 반응을 보인다.
첫번째로 중요한 개념은 Interrupt
아주 중요한 역할을 한다.하드웨어가 cpu랑 커뮤니케이션하는 중요한 방법을 말한다.
마우스를 움직이거나 키보드를 클릭하는 등의 이벤트가 발생하면 interrupt가 발생
그러면 control이 서비스 루틴으로 넘어간다.
눌러지면 처리할 수 있는 intteruupt 서비스 루틴으로 넘ㅁ어간다.
기본적으로 interrupt vetor 테이블이 존재, 즉 메모리에 interrupt 있어서
Interrupt가 발생하면 dl interrupt를 처리할 수 있는 interrupt 서비스 루틴의 주소가
Interrupt votor 테이블에 저장되어있다.
Interrupt vector 테이블을 쭉 뒤져서 해당하는 interrupt 를 처리할 수 있는
Interrupt 서비스 루틴으로 점프하게 된다.
interrupt 서비스 루틴 내에서 해당하는 interrupt 를 처리하게 된다.
Interrupt vetor 테이블을 이용하는 방법은 두가지가 있다.
1. Polling : 주기적으로 cpu가 a디바이스를 체크해서 작업을 확인 -> b디바이스 체크,작업 확인 -à 이런 작업을 하는게 polling 시스템
2. Vectored interrupt system
Interrup가 발생했을 때 해당하는 interrupt 서비스 루틴들이 interrupt vetor 테이블에 저장되어있다.
Interrupt 서비스 루틴 또한 소프트웨어라고 볼 수 있다.
현재 내가 진행하고있는작업을 일시중시하고 interrup 서비스 루틴t를 실행해야 하기 때문에 interrupt가 발생된 시점의 주소를 반드시저장해줘야한다.
운영체제의 중요한 역할 중 하나는 현재 interrupt가 발생했을 때 현재 진행중인 작업을 그댈로 저장해줘야한다.
레지스터나 프로그램 카운터의 값들을 그래로 저장한 상태에서 interrupt 서비스 루틴을 실행하고 이루틴이 끝나게 되면 원상복귀시켜서 원래작업들을 진행시킨다.
Interrupㅅ은 우선순위가 존재한다. Interrupt을 disbled 시킬수있다.
interrupt순서가 아주높은애들은 자기자신을 우선처리하고 다른 모든 interrupt을 disabled 처리한다.
Reset은 아예 disabled 될 수 없는 interrupt이다.
아주 중요한 interrupt
지금까지 섦명한건 하드웨터, 솦웨 상관없이 동일하게 적용되는 interrupt처리하는 방법
interrupt에는 솦웨 interrupt존재 à 이걸 trap이라고 한다.
에러가 발생한다던가, 사용자가 시스템 코어를 이용해 운체에게 서비스를 요청할 때 trap이 발생
운체는 interrupt 기반으로 동작한다.
운체는 어떤 이벤트가 발생하지 않으면 가만히 있는다.
반드시 이벤트가 발생해야 그에 상응하는 반응으로서 운체가 동작
꺽인 부분은 인터루프 처리, 발생 구간
Storage Structure
D어떤 프로그램을 실행하기 위해서 일어나는 시퀀스
1. 프로그램을 메모리에 적재
2. 기계 코드를 하나 가지고옴
3. 이를 무슨 동작인지 디코딩
4. 필요에 따라서 operend를 fetch
5. 프로그램 카운터가 증가
다시 2번실행
Cpu가 instruction을 실행하는 기본적인 사이클
프로그램을 실행하기 위해서는 프로그램은 반드시 메모링[에 적재되어야 한다.
메인 메모리는 파워를 끄게되면 저장 데이터 날라간다.
그래서 메인 메모리를 보완할수 있느게 필요
레지스터, 메인메모리, 캐쉬
IO structure
Cpu와 동시에 실행 가능 (프린터로 출력하며 워드로 작성 동시에 가능)
모든 io장치는 그 io를 위한 디바이스 컨트롤럴 존재
이게 해당하는 디바이스를 제한
컨트롤럴 내에 레지스터가 존재, 레지스터들을 몾적에 맞게끔 설정하여 io장치를 액세스 조치한다.
Cpu는 로컬 버퍼에 값을 쓰게 되고,
인터춥트에 의해!!
DMA
인터룹트는 속도가 느려질 수 박ㄲ에 없다.
10명의 사람을 1명씩 태워서 10명보내기(인터룹트)
DMA- 많은 데이터를 한번에 보내는 작업을 해주는 ㅕ역할을 한다..
Cpu의 중재 없이 직접 io장치와 메모리로 데이터를 한번에 보낸다.
기존에는 io에 인터룹트 걸고 전달
하지만 DMA쓰게되면 DMA 컨트롤러에 의해서 다량의 데이터가 한번에 메모리로 전달
è 속도가 더 빨라지는 장점 존재
è 데이터 블락마다 발생
싱글 칩내에 코어가 존재, 전력소모도 훨씬 적다. 저전력 빠른 속도
---기본적인 하드웨어---
실행하고자하는 여러 개의 프로그램을 메모리에 올린다.
큰 특징은 여러 개의 잡을 한꺼번에 메모리에 올리는 것
효율이 높다는 장점이 있다.
자발적으로 cpu를 반납하기전까지는 다른놈이 cpu를 사용할 수 없음
타임쉐어링- 여러 개의 잡들을 한꺼번에 메모리에 올린다는 취지는 동일하지만
차이는 배치 시스템. 각 잡들에게 아주 짦은 시간만 할당 – 그시간 동안에만 cpu쓸 수 있도록 허락
그 시간이 넘어가면 cpu를 뻇어서 다른잡에게 cpu를 할당
그 기간이 대략1초미만이라 각각의 잡들은 마치 각자 배치된 컴이 있는 것처럼 보인다.
대화형 컴퓨팅에 유리,
앞에서 본거는 언제 cpu가 끝날지 몰른다. 사용자 입력밥ㄷ는 것이 불가능할 수 도있다.
각 잡마다 짦은 시간을 할당해주기 떄문에, 독점을 하는것처럼 사용가능하기떄문에 interactive하게 만들 수 있다.
대부분의 컴은 타임쉐어링 시스템이다.
여러 개의 잡들이 동시에 메모리에 올라와줘야한다.
프로그램하나가 하나의 프로세스
여러 개의 잡들 중에서 누가 메모리에 올라갈것인가를 결정위해 job scheduling
메모리가 부족해서 덩치가 큰 프로그램 실행 불가->현재 실행중인 프로그ㅐㅁ을 디스크에 잠시 저장시키고 그 공간을 덩치 큰 프로그램에 할당하는 것à 스와핑
덩치큰프로그램을 한번에 올리는 것이 아닌 작은 단위로 배분해 메모리에 올리는 거
è 가상 메모리
이러한 여러가지 기능들을 운영체제가 제공해줘야한다.
현재 설정된 모드와 기계의 모드가 일치할 때 실행하는 것 – dual mode execution
둘이 시스템을 안정적으로 보호하기 위해 사용되는 대표적 테크닉
듀얼모드
-운영체제가 어떠 ㄴ명령어를 실행할 때 실행 가능 여부를 결정한다.
-하드웨어적인 지원 필요하다
-mode bit의 설정 된 값과 현재 실행하고자 하는 기계어의 모드를 비교해 일치할 때만 실행
예 : 현재 mode bit이 커널 모드라면, 커널모드에서 실행되는명령어라면 문제 안된다.
하지만 만약 유저모드라면 일치하지 않아 운체가 해당하는 프로세스를 죽이게 된다.
유저 – 사용자 프로세서가 실행해도 되는 모드
커널-커널이 실행해야 하는 모드
모드가 두개 있으면 기계어 코드도 두개로 구성
유저모드에서 실행되는 명령어
커널 모드에서 실행되는 명령어- 운체가 실행해야되는 명령어
시스템에 크리티컬 가져오는 명렁어이다-커널
유저모드에서 실행될수있는 명령어인지 아닌지 살펴ㅁ보면
Set value of timer : kernel , 타이머는 사용자가 아닌 반드시 커널이 실행해야한다
Read the clock은 단순히 읽어들어는거기 때문에 user
Turn off interrupt : 디바이스로부터 데이터못받을 수도 있는 문제발생-> kernel
Access io : 반드시 커널을 통해서실행
Trap을 발생하는 명령어 : 소프트웨어 인터룹트를 트랩이라한다
트랩을 발생시키는 명령어는 유저측에서 실행해야한다 왜냐면 디스크에 값을쓴다할 때 사용자 프로세스가 운영체제에게 요청해야 한다. 운체가 나대신에 파일을디스크에 쓰게된다.
위 예시처럼 요청하는 작업을 시스템 콜이라고 한다.
시스템 콜을 발생시키는 명령어가 바로 트랩 인스트럭션
사용자 프로세서가 트랩 인스트럭션을 이용해 시스템 콜을 호출-> 그럼 운체가 사용자가 요청한 작업을 실행한다.
시스템 콜은 운체가 사용자를 대신해 중요한 작업을 할 때 사용
중요한 역할 중 하나가 모드를 커널모드로 바꿔주는 것
커널모드에서 실행되는 시스템콜작업이 끝나게 되면 유저모드로 바꿔줘야 한다.
쉽게 연상 할 수 있는 것은 법스 전용차로차선,
일반자동차는 벌금물지
모두가 하나의 모드라면. 그 모드에 해당하는 명령얼를 실행해야 한다.
명ㅇ령어마다 어떤 모드에서 실행해야되는지 정의되어있다.
그 명령어에 assign된 모드를 비교해서 명령어 실행 가능 여부 및 동작 여부가 실행된다.
시스템 콜을 요청하게 되면 시스템콜이 하는 역할이 모드를 바꾼다.
유저 프로세서가 실행하다가 시스템 콜을 실행하면 트랩이 발생, mode bit 을 바꿔준다.
è 커널모드로 바꿔준다.
시스템 콜이 끝나게 되면 다시 유저 프로세서로 넘어가야 하기 떄문에 mode를 1로 바꿔준다.
운영체제가 하는 작업들
- 하드웨어를 관리, 프로세서가 실행해야하는 환경을 만들어준다.
프로세서 관리
- 프로그램은 디스크에 저장되어이쓴 파일, 프로그램이 실행이되면à이게 프로세서
프로세서는 active 한 entity
프로세서가 끝나게 되면 할당되어있던 자원들이 release가 되서 다른 프로세서가 사용가능하도록된다.
싱글 쓰레드는 프로그램 카운터가 하나만 존재,
멀티 쓰레드는 각 쓰레드마다 프로그램 카운터가 존재해 서로다른 프로세서 실행가능
운체가 가장먼저해야될 작업은 프로그램을 메모리에 적재하는 것
복수개의 프로그램을 메모리에 올리기위해 여러가지 작업들 존재,
저장장치 관리- 기본단위 : 파일, 파일이란 디스크 블록들의 모음, 연속된 공간(데이터들이 저장되는)
운영체제가 무엇이냐- 하드웨어를 관리하고 동시에 응용프로그램이 실행될수있는 환경을 제공하는 것이 운영체제의 역할
운체는 기본적으로 interrup를 기반으로 동작한다- 하드퉤어와 소프트웨어로 구분
시스템을 안정적으로 유지보완,
è 듀얼모드 operation, timer
멀티프로그래밍과 타임쉐어링의 공통정 및 차이점 알아두기
둘다 일개의 프로세서를 메모리에 동시에 올려 한 프로세서가 프로그램 사용하다가 반납하게 되면 씨피유를 다른 프로그램에게 재할당해서 씨피유를 바쁘게 만든다.
타임쉐어링은 짦은 구간동안만 씨피유를 할당- 시간 넘어가면 씨피유를 뺏어서 다른 프로세서에게 할당, 마치 자기자신의 독점 씨피유가 있는것 같은 효과
타임쉐어링은 대화형 시스템에서 적용가능한 시스템
'운영체제 ( OS )' 카테고리의 다른 글
[운영체제 ] 6주차 정리본 (0) | 2021.04.26 |
---|---|
[운영체제 ] 5주차 정리본 (0) | 2021.04.26 |
[운영체제 ] 3장 정리본 (0) | 2021.04.26 |
[운영체제] Thread 정리본 (0) | 2021.04.26 |
[운영체제] [ Thread ] (0) | 2021.03.25 |