전체 글(90)
-
커널
자동차의 엔진, 사람의 심장처럼, 운영체제의 '핵심 서비스'를 담당하는 부분 컴퓨터가 부팅하는 순간, 커널 코드가 메모리에 올라가고, 다른 프로그램과 다르게 항상 메모리에 상주한다. 컴퓨터 시스템 구조 커널의 3가지 특성 자원을 보호하는 보안성 수많은 하드웨어가 접근가능하도록 하는 추상화 자원관리를 위한 스케줄링 1. 보안성 커널은 사용자나 응용프로그램으로부터 컴퓨터 자원을 보호하기 위해 자원에 직접 접근하는 것을 차단한다. 따라서 사용자나 응용프로그램이 자원을 이용하기 위해서는 System Call이라는 인터페이스를 이용하여 접근해야한다. System Call은 커널이 제공하는 시스템 관련 서비스를 모아넣은 것으로, 함수 형태로 제공한다. 2. 추상화 응용프로그램과 커널의 인터페이스가 System Ca..
2024.01.11 -
운영체제의 분류
동시 작업을 지원하는지의 여부에 따른 분류 동시 작업을 지원하지 않는 단일 작업(single tasking) 운영체제 한번에 프로그램 한 개만 실행 가능, ex) DOS 동시 작업을 지원하는 다중 작업(multi tasking) 운영체제 동시 작업 = 하나의 프로그램이 끝나기 전에 다른 프로그램을 실행시키는 것이 가능 즉, 한번에 여러 프로그램 실행 가능한 것을 의미한다. 최근의 운영체제는 대부분 다중 작업(multi tasking)을 지원한다. cpu작업시간을 조금씩 나누어 쓰는 것을 시분할 시스템(time sharing system)이라고 한다. 여러 프로그램이 조금씩 메모리 공간을 보유하며 동시에 메모리에 올라가 있는 것을 다중 프로그래밍 시스템(multi-programming system)이라고도..
2024.01.11 -
운영체제란 무엇이고, 어떤 역할을 수행하는가?
운영체제란? 실행할 프로그램에 필요한 자원을 할당하고, 각 프로그램이 올바르게 실행되도록 돕는 프로그램 운영체제도 프로그램이기 때문에 메모리에 적재되어서 실행된다. 이때, 운영체제가 메모리에 적재되는 영역을 커널 영역이라고 한다. 응용프로그램과 하드웨어의 중간매개체 운영체제의 역할 메모리 관리 - 어떤 프로그램을 어느 곳에 적재시킬지 CPU 관리 - 어떤 프로그램을 먼저, 얼마동안 CPU를 사용하도록 할지 입출력장치 관리
2024.01.11 -
시스템 콜, dual mode
시스템 콜 : 소프트웨어가 자신이 할 수 없는 일을 운영체제에게 넘기기 위해, 본인 스스로 인터럽트를 거는 것, 즉 커널 함수를 호출하는 것을 말한다. 시스템 콜의 예시로, 사용자 프로그램A가 파일을 읽어와야하는 경우가 발생했을 경우, 파일을 읽어달라는 요청을 본인 스스로 할 수 없기때문에, cpu제어권을 운영체제에게 넘겨 파일을 읽어달라고 대신 부탁하기 위해, 본인 스스로 인터럽트를 거는 상황으로 볼 수 있다. 운영체제의 dual mode는 운영체제를 보호하기 위한 기법으로, 사용자와 운영체제가 시스템 자원을 공유하는데, 사용자에게 제한을 두지 않으면, 메모리 내의 운영체제 자원을 망가뜨릴 위험이 생기게 되어, 운영체제를 위한 보호장치가 필요하게 되는데, 이를 dual mode라고 한다. 커널은 내부적..
2024.01.04 -
Collections.shuffle() 불변객체
아래처럼, LottoOneSet객체를 생성할때, generateRandomNumbers()에서 Randoms.pickUniqueNumbersInRange를 통해 1부터 45까지의 숫자 6개를 무작위로 생성한 후, 이를 토대로 정렬하려고 하였다. 그러나 ApplicationTest에서 아래와 같은 오류가 났음을 확인할 수 있었다. ImmutableCollections라고 하는데.. 난 이걸 쓴적이 없는데 뭐지? 혹시나 싶어 Randoms.pickUniqueNumbersInRange때문인가 싶어. Randoms클래스를 확인해보았다. Randoms클래스는 Collections.shuffle메소드를 통해 결과를 반환함을 확인할 수 있었다. Collections.shuffle()메소드는 자바의 불변객체로, 요소를..
2023.11.08 -
Build, Compile, Run 개념
컴파일 (Compile) Java에서는 컴파일러가 소스코드를 바이트코드로 바꾸는 과정을 의미함. >> 위를 통해 .class파일이 생성됨. >> 바이트 코드로 바꾸는 이유 : JVM이 이해할 수 있는 코드는 바이트코드임. 빌드 (Build) 빌드는 컴파일을 포함하여, 실행할 수 있는 환경을 제공하게 됨. Run 컴퓨터가 소스코드를 이해할 수 있는 기계어로 바꾸는 것을 의미함. 앞서 컴파일러가 생성한 *.class파일(목적파일)을 JVM의 Class Loader가 JVM 상으로 가져와 메모리에 올리고, 필요한 클래스들을 로딩한다. 그리고 JIT(Just-In-Time) Compiler가 메모리 상에 있는 바이트 코드를 기계어 형태로 바꿔서 실행한다.
2023.08.25