분류 전체보기

    7. 교착상태(Deadlock)

    교착상태(Deadlock) 교착상태(Deadlock)은 일련의 프로세스들이 서로가 가진 자원을 기다리며 block된 상태를 말한다. 여기서 자원은 하드웨어(cpu, memory..)가 될 수도 있고, 소프트웨어가 될 수도 있다. 교착상태 발생에는 4가지 조건이 존재한다. 이것들이 전부 동시 만족해야 교착상태가 발생한다. Mutual exclusin(상호배제) 매 순간 하나의 프로세스만이 자원을 사용할 수 있다. No preemption(비선점) 프로세스는 자원을 스스로 내려놓을 수 있지만 강제로 빼앗기지 않는다. Hold and wait(점유 대기) 자원을 가진 프로세스가 다른 자원을 기다릴 때 보유 자원을 놓지 않고 계속 가지고 있는다. Circular wait(순환 대기) 자원을 기다리는 프로세스간에..

    6. 프로세스 동기화

    6. 프로세스 동기화

    데이터의 접근 데이터의 접근은 다음과 같은 순서로 일어난다. 1. 데이터가 저장되어 있는 공간에 접근한다. 2. 연산할 데이터를 가져온다. 3. 연산을 실행한다. 4. 연산 결과를 다시 저장한다. ex) cpu-memory, 컴퓨터 내부-디스크, 프로세스-프로세스의 주소 공간 이 때 여러 프로그램이 하나의 저장 공간을 공유하는 경우 경쟁 상태(race condition)의 가능성이 존재한다. 경쟁 상태란 둘 이상의 입력 또는 조작의 타이밍이나 순서 등이 결과값에 영향을 줄 수 있는 상태를 말한다. 예시로는 멀티프로세서 시스템, 공유 메모리를 사용하는 프로세스들, 커널 내부 데이터를 접근하는 루틴들이 있다. OS에서 경쟁 상태는 여러 프로세들이 동시에 공유데이터를 접근하는 상황을 의미하며 또 데이터의 최종..

    5. CPU 스케줄링

    CPU 스케줄링 프로세스에서 실행하는 작업은 두 가지로 나뉜다. 첫 번째는 cpu만 실행하는 작업이고, CPU burst라고 한다. 두 번째는 IO만 실행하는 작업이고, IO burst라고 한다. 보통 이 두 개가 섞여있는데, CPU는 짧게 쓰고 중간에 IO에 많은 시간이 필요한 작업을 I/O bound process라고 하고, CPU를 아주 길게 쓰는 계산 위주의 작업을 cpu bound process라고 한다. 이런 여러 작업들이 섞여 있기 때문에 cpu 스케줄링이 필요하다. cpu 스케줄링은 cpu와 IO 장치 등의 시스템 자원을 골고루 효율적으로 사용하는 것을 목표로 한다. 여기서 cpu 스케줄러라는 개념이 등장하는데 cpu 스케줄러는 어떠한 장치가 아니라 운영체제 상의 코드를 의미한다. cpu ..

    aws lambda에서 pandas 사용하기

    aws lambda에서 pandas 사용하기

    pandas를 위해 필요한 것 pandas는 기본적으로 하나의 모듈이 아니라, pandas를 사용하기 위해 여러 모듈들을 같이 설치하는 구조로 되어있다. 따라서 pip로 설치해보면 pandas만 깔리는 것이 아니라 여러 모듈들도 같이 깔린다. 그 중에 제일 중요한게 numpy인데, 실제로 pandas 모듈만 따로 레이어에 업로드해보면, 작동하지 않는다. aws-lambda는 amazon linux에서 돌아가는데, amazon linux는 PyPi나 conda-forge에서 설치하는 보통 numpy를 사용할 수 없다고 한다. 방법 사실 방법은 두 가지 정도가 존재하는데, 첫 번째 방법은 pandas와 그에 필요한 pytz 딱 두 개를 다운 받아서 레이어에 업로드하고 부차적으로 필요한 numpy나 scipy..

    aws lambda에서 파이썬 selenium 동작하게 하기

    aws lambda에서 파이썬 selenium 동작하게 하기

    이번에 챗봇 프로젝트를 진행하면서 웹 페이지에서 생성되는 파일 이름을 읽어올 필요가 있었다. 처음에는 requests를 이용하려 했으나, 그것이 동적으로 생성되는 데이터임으로 깨닫고.. selenium으로 변경했다. 그리고 이것을 실행할 환경인 aws lambda에서 돌아가게할 필요가 있었다. selenium 모듈 파일부터 구해야.. aws-lambda에서는 라이브러리를 따로 레이어 계층이란 곳에 추가시켜줘야 사용할 수 있다. 이 때 레이어는 파이썬 모듈 파일들을 zip로 압축한 파일들을 말하며, 이런 레이어들을 각 함수에서 추가시켜주면 된다. 우선 selenium을 aws-lambda에서 동작시키는데에는 3가지가 필요하다. chromedriver, headless-chromium, selenium이다...

    4. 프로세스 생성

    4. 프로세스 생성

    프로세스 생성 부모 프로세스가 자식 프로세스를 생성하는 것을 프로세스 생성이라고 한다. 리눅스, 유닉스 계열의 OS에서는 최초의 프로세스 init이 존재하고, 그 프로세스가 다른 자식 프로세스를 생성할 수 있고 그 자식 프로세스는 또 다른 자식 프로세스를 생성할 수 있다. 이 때 프로세스의 생성에는 사용자 프로그램이 아니라, 운영체제의 시스템 콜을 통해서만 가능하다. 이렇게 생성된 프로세스는 트리 구조를 형성하고 각자 고유한 번호인 pid를 가지게 된다. 프로세스의 생성은 두 가지 단계로 나뉘어진다. 1. 자식 프로세스가 부모 프로세스의 code, data, stack 그리고 cpu 문맥(프로그램 카운터), 운영체제 데이터, pcb등 문맥을 모두 복사한다. 2. 자식 프로세스는 복제 후 공간에 새로운 프..

    3. 프로세스

    3. 프로세스

    프로세스와 문맥 프로세스는 실행중인 프로그램이다. 프로그램이 실행되면서 변경되어 온 상태들이 있을텐데 그것들 현재에 나타낸 것을 프로세스의 문맥이라고 한다. 프로세스 문맥은 3가지로 나뉘어진다. cpu 수행 상태를 나타내는 하드웨어 문맥 - 프로그램 카운터, 각종 레지스터 프로세스의 주소 공간 - code, data, stack 프로세스 관련 커널 자료 구조 - PCB, 커널 stack 프로세스의 상태 프로세스의 상태는 크게 3개로 나뉜다. Running - cpu를 잡고 instruction을 수행중인 상태 Ready - cpu를 기다리는 상태(메모리 등 다른 조건을 모두 만족하고 언제든 cpu를 받으면 Running 할 수 있는 상태) Blocked - cpu를 주어도 당장 instruction을 수..

    2. 시스템 구조와 프로그램 실행

    2. 시스템 구조와 프로그램 실행

    컴퓨터 구조 CPU cpu에는 저장 장치인 레지스터, mode bit, interrupt line 등이 존재한다. 레지스터는 데이터를 저장하는 역할을 하고, mode bit은 현재 커널 모드(0)인지 사용자 모드(1)인지를 나타낸다. interrupt line은 하드웨어나 소프트웨어의 인터럽트를 저장하는 공간으로, 이 공간에 인터럽트가 존재하면 운영체제에게 cpu를 넘겨주게 된다. Memory 메모리에는 사용자 프로그램과 운영체제가 저장되어 있으며 cpu가 메모리에 있는 사용자 프로그램을 번갈아가면서 실행한다. I/O device 입출력장치를 뜻하며, disk, 키보드, 프린터, 모니터 등이 해당된다. 각 입출력장치에는 local buffer와 device controller가 존재한다. device c..

    1. 운영체제 소개

    운영체제의 목적 1. 컴퓨터 시스템의 자원을 효율적으로 관리한다. -> 프로세서, 기억장치, 입출력 장치 등의 효율적 관리 2. 사용자간에 형평성 있게 자원을 분배한다. 3. 주어진 자원으로 최대한의 성능을 낼 수 있도록 한다. 운영체제의 분류 1. 동시 작업 가능 여부 - 단일 작업 : 한번에 하나의 작업만 처리한다. ex) MS-DOS - 다중 작업 : 동시에 두 개 이상의 작업을 처리한다. ex) UNIX, Windows 2. 사용자의 수 여러 계정을 만들어 동시 접근할 수 있는가에 대한 분류다. - 단일 사용자 ex) MS-DOS, Windows - 다중 사용자 ex) UNIX, NT Server ! Windows는 원격접속을 이용해 다중 사용자용으로도 사용할 수 있다. 3. 처리 방식 - 일괄 ..

    java [8] java.lang패키지와 유용한 클래스

    java [8] java.lang패키지와 유용한 클래스

    자바의 정석을 보며 새로 알게되거나 잊었던 사실들을 포스팅한다 java.lang java.lang패키지는 자바 프로그래밍에 기본이 되는 클래스들을 포함하고 있다. 따라서 따로 import하지 않아도 사용할 수 있게 되어 있다. Object 클래스 Object클래스는 모든 클래스의 최고 조상이다. 그렇기 때문에 이 클래스에 속한 멤버들은 모든 클래스에서 바로 사용가능하다. equals(Object obj) 매개변수로 객체의 참조변수를 받아서 비교하여 그 결과를 boolean으로 알려 주는 역할을 한다. 이 메서드는 두 객체의 같고 다름을 참조변수의 값으로 판단한다. 따라서 서로 다른 두 객체를 비교하면 항상 false를 결과로 얻게 된다. 따라서, 만약 인스턴스가 가지고 있는 value값들을 비교하고 싶을..